|
|
|
|
|
для: .....
(13.09.2010 в 15:53)
| | Все, спасибо! Понял теперь, что читаемый массив перезаписывать нельзя. | |
|
|
|
|
автор: ..... (13.09.2010 в 15:53) |
|
|
для: V2D
(13.09.2010 в 14:34)
| | Всё логично, просто вы сами наращиваете массив с каждым переходом по нему
<?php
$map = array('111', '222');
$i=0;
if (!is_array($map)) exit('is ne array :)');
do {
$item = current($map);
// курсор как-бы указывает на "адрес элемента массива"
echo '<h3>'. $item .'</h3><pre>';
$map=array_merge(array(rand(0, 150)), $map);
// создание нового (большего размера) массива и вписывание его по адресу первого
if((++$i)>5) break;
print_r($map);
echo "</pre>\n";
}
while (false !== next($map));
# сдвиг курсора на 1+ предидущее положение от начала
|
не перезаписывайте читаемый массив и зацикливания не будет | |
|
|
|
|
|
|
|
для: V2D
(13.09.2010 в 15:20)
| | Оператор цикла while() ничего заранее не просчитывает.
Он перед каждым очередным проходом вычисляет выражение в скобках. И оценивает его на ложь / истину. И если оценил истиной - выполняет оператор после скобок. | |
|
|
|
|
|
|
|
для: sim5
(13.09.2010 в 14:39)
| | Если предположить что while заранее просчитывает кол-во элементов массива который ему передали.
То следуя логике в этом коде должно быть минимум 4 прохода. Однако он все-равно зациклится на второй проход и в $item будет передавать 222 пока $i<5.
если же $map=array_merge($map, $map1); заменить на цикл который перебирает массив $map1 и добавляет значения в $map. Тогда все работает нормально. Вот почему так?
<?php
$map[] = "111";
$map[] = "222";
$map[] = "333";
$map[] = "444";
while ($item = current($map)) {
$map1[] = rand(0, 150);
$map=array_merge($map, $map1);
$item = next($map);
echo $item . " - " . current($map) . "<br>"; // все, приехали, поняли почему?
print_r($map);
++$i;
if($i>5){
break;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Kioshy
(13.09.2010 в 14:59)
| | операция, а не оператор.
и пост был в адрес sim5 | |
|
|
|
|
|
|
|
для: Trianon
(13.09.2010 в 14:57)
| | наверно я уже слишком стар для такого юмора тока все равно не понял причем тут оператор присваивания и ваш предыдущий пост о $item = current($map) =) | |
|
|
|
|
|
|
|
для: Kioshy
(13.09.2010 в 14:55)
| | = операция присваивания.
можете встать. | |
|
|
|
|
|
|
|
для: Trianon
(13.09.2010 в 14:52)
| | брр эт с какой же стороны current является операцией присваивания?
чуть не упал со стула читая ваш пост =) | |
|
|
|
|
|
|
|
для: sim5
(13.09.2010 в 14:39)
| | всё бы ничего, да только $item = current($map) - условие чисто формально.
На деле это операция присваивания. | |
|
|
|
|
|
|
|
для: V2D
(13.09.2010 в 14:34)
| | Он никак не может зациклится, и будет всего один проход, так как массив, который вы проходите циклом, модифицируется объденением, после которого первым индексом становится значение добавленного, и после $item = next($map) будет выполнено условие $item = current($map).
Вообще же, код какой-то дикий, непонятный для чего. | |
|
|
|
|