думал спросить в теме для новичков, но потом решил что этот вопрос не относится к основам и может быть интересен не только мне. интересно, есть ли способ управлять foreach? в частности - при определенном условии вернуть его на предыдущую позицию т.е. к примеру foreach($keys as $key) { echo $key; if($key == ...) prev($key); // не работает } суть в том, чтобы в следующей итерации снова повторился текущий ключ PS я знаю про for(), хочется обойтись без него
http://ru2.php.net/manual/en/control-structures.foreach.php Поэтому: PHP: $keys = range(1, 5); while(list($value, $key) = each($keys)) { if($key == 3) next($keys); echo $key . "\n"; } Результат: Code: 1 2 3 5
если я правильно понял ТС: PHP: <?php $array = range(1,5); $flag = true; while($current = current($array)) { echo $current . "<br>"; next($array); if ($current == 2 && $flag) { prev($array); $flag = false; } } ?> Результат: Code: 1 2 2 3 4 5
ну да, в целом реализация позволяет добиться того что нужно но тут надо сказать, почему я не хочу использовать for, в котором достаточно написать $i-- PHP: $keys = ... $size = sizeof($keys); for($i = 0; $i < $size; $i++) { $key = $keys[$i]; echo $key; } а в случае с foreach() PHP: $keys = ... foreach($keys as $key) { echo $key; } не хватает лишь возможности открутить его обратно при условии я знаю что фореач это копия, узрел как-то в учебнике по плюсам но это нисколько не оправдывает отсутствие такой возможности ну и вариант с each() ещё более ужасен в плане красоты кода судя по всему простого решения нет, поэтому всем спасибо, не заморачивайтесь над этим. просто у меня такие вот нездоровые стремления
оператор foreaM ты гарантированно получишь каждый элемент, поскольку не потребуется вручную устанавливать цикл и запрашивать счетчик, а оператор, содержащийся в цикле, автоматически поместит элемент в указанную тобой переменную — достаточно лишь сослаться на нее в этом операторе.
что не так? PHP: foreach($keys as $i=>$key) { echo $key; //показыввает текущий элемент if($key == ...) //если $key == ... то $keys[$i-1]; //показывает предыдущий элемент }
Ок, покажи пример скрипта на основании своего алгоритма, отвечающего условиям, озвученным в первом посте, чтобы смыть с себя все то заслуженное говно, которым я тебя заслуженно облил.
на PHP: $keys=range(1,100); foreach($keys as $i=>$key) { echo $key."<br>"; if($key == 20){echo $keys[$i]."<br>";} } exit; обливатель. Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
молодец, а говорил не знаешь а теперь представь, что не на предыдущую, а на две-двадцать назад, и ключи у массива не идут так - 1,2,3,4,5,6, а, например, так - 1,11,34,45,67,89,90 PS: И потом ты не вернул на предыдущую позицию, а просто повторил два раза текущую, разницу чуствуешь?