Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Странное зацикливание (http://www.flasher.ru/forum/showthread.php?t=102378)

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

Загадка не для оного ума...

Skubent 15.10.2007 00:18

Осталось сообразить, что инкремент неопределенного значения на единицу может повесить что угодно, а не только локальный браузер...

AleXNoD GD 15.10.2007 02:14

Где ошибка? - в ДНК))))
А если серьезно, можно ли как-то обойти проблему? Этот код чисто показательный, а вообще необходимо расставить "веса" ключей при помощи инкремента. Но тут такая вот хренотень.

Kikasso 15.10.2007 02:26

Что значит чисто показательный? У вас второй массив пустой, а вы там что-то плюсуете.

Skubent 15.10.2007 03:34

Буратино дали два яблока. Он отдал одно Мальвине. Сколько яблок осталось у Буратины ? Правильно, хз. Мораль - инициализируйте переменные.

etc 15.10.2007 10:30

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]++;
}
?>

работает

Теперь всё в порядке. Вы сделали вклад в создание совершенного искусственного интеллекта)))

Skubent 16.10.2007 21:50

>>Вы сделали вклад в создание совершенного искусственного интеллекта
Чур меня...
Код:

    if(!$out[$k]){
        $out[$k] = 1;
    }else{
        $out[$k]++;
    }

Не работает почему ? Потому что операция НЕ в условии применяется к неопределенному значению.
isset() - более правильный вариант проверки переменной на наличие значения.

Кроме того, что мешает просто заполнить весь $out единицами ?

AleXNoD GD 16.10.2007 22:04

Цитата:

Сообщение от Skubent
Кроме того, что мешает просто заполнить весь $out единицами ?

Мешает неопределенность. Массив будет заполняться на лету.

По поводу isset - да, тут я ступил.


Часовой пояс GMT +4, время: 00:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.