Просмотр полной версии : Странное зацикливание
AleXNoD GD
14.10.2007, 08:02
Вот скажите мне, почему
<?
$arr = Array();
$out = Array();
for($i=0;$i<100;$i++){
$arr[]=$i;
}
foreach($arr as $k=>$v){
$out[$k]++;
}
?>
работает исправно, а
<?
$arr = Array();
$out = Array();
for($i=0;$i<1000;$i++){
$arr[]=$i;
}
foreach($arr as $k=>$v){
$out[$k]++;
}
?>
подвешивает мне браузер :umnik2: ? В чем проблема то?
Добавлю, что если "++" заменить на "= 1", то есть не увеличивать значение, то всё отлично. Проблема именно с "++".
AleXNoD GD
14.10.2007, 23:30
Загадка не для оного ума...
Осталось сообразить, что инкремент неопределенного значения на единицу может повесить что угодно, а не только локальный браузер...
AleXNoD GD
15.10.2007, 02:14
Где ошибка? - в ДНК))))
А если серьезно, можно ли как-то обойти проблему? Этот код чисто показательный, а вообще необходимо расставить "веса" ключей при помощи инкремента. Но тут такая вот хренотень.
Что значит чисто показательный? У вас второй массив пустой, а вы там что-то плюсуете.
Буратино дали два яблока. Он отдал одно Мальвине. Сколько яблок осталось у Буратины ? Правильно, хз. Мораль - инициализируйте переменные.
AleXNoD GD, а внимательно на свой код посмотреть?
Заполняется массив arr, а плюсуются значения у out, который пуст. Неудивительно, что ничего не работает.
AleXNoD GD
16.10.2007, 21:10
Всё ясно, спасибо большое за красочные ответы. Просто меня смутил тот факт, что
<?
$arr = Array();
$out = Array();
for($i=0;$i<1000;$i++){
$arr[]=$i;
}
foreach($arr as $k=>$v){
if(!$out[$k]){
$out[$k] = 1;
}else{
$out[$k]++;
}
}
?>
НЕ работает
<?
$arr = Array();
$out = Array();
for($i=0;$i<1000;$i++){
$arr[]=$i;
$out[]=0;
}
foreach($arr as $k=>$v){
$out[$k]++;
}
?>
работает
Теперь всё в порядке. Вы сделали вклад в создание совершенного искусственного интеллекта)))
>>Вы сделали вклад в создание совершенного искусственного интеллекта
Чур меня...
if(!$out[$k]){
$out[$k] = 1;
}else{
$out[$k]++;
}
Не работает почему ? Потому что операция НЕ в условии применяется к неопределенному значению.
isset() - более правильный вариант проверки переменной на наличие значения.
Кроме того, что мешает просто заполнить весь $out единицами ?
AleXNoD GD
16.10.2007, 22:04
Кроме того, что мешает просто заполнить весь $out единицами ?
Мешает неопределенность. Массив будет заполняться на лету.
По поводу isset - да, тут я ступил.
Синтетические примеры - в общем случае - зло. Хотя правильно составленная синтетика - большой плюс, да.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.