Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
есть ли способ управлять foreach? |

01.03.2010, 13:58
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
есть ли способ управлять foreach?
думал спросить в теме для новичков, но потом решил что этот вопрос не относится к основам и может быть интересен не только мне.
интересно, есть ли способ управлять foreach?
в частности - при определенном условии вернуть его на предыдущую позицию
т.е. к примеру
foreach($keys as $key)
{
echo $key;
if($key == ...)
prev($key); // не работает
}
суть в том, чтобы в следующей итерации снова повторился текущий ключ
PS я знаю про for(), хочется обойтись без него
|
|
|

01.03.2010, 14:09
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
PS я знаю про for(), хочется обойтись без него
Почему?
Воспользуйся while тогда)
|
|
|

01.03.2010, 14:11
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
http://ru2.php.net/manual/en/control-structures.foreach.php
Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself
Поэтому:
PHP код:
$keys = range(1, 5);
while(list($value, $key) = each($keys)) {
if($key == 3)
next($keys);
echo $key . "\n";
}
Результат:
__________________
включи голову
|
|
|

01.03.2010, 14:22
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
если я правильно понял ТС:
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;
}
}
?>
Результат:
|
|
|

01.03.2010, 15:12
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
ну да, в целом реализация позволяет добиться того что нужно
но тут надо сказать, почему я не хочу использовать 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() ещё более ужасен в плане красоты кода
судя по всему простого решения нет, поэтому всем спасибо, не заморачивайтесь над этим. просто у меня такие вот нездоровые стремления 
|
|
|

02.03.2010, 23:31
|
|
Участник форума
Регистрация: 02.02.2009
Сообщений: 146
Провел на форуме: 1093500
Репутация:
43
|
|
|
|
|

02.03.2010, 23:39
|
|
Новичок
Регистрация: 24.03.2009
Сообщений: 18
Провел на форуме: 147876
Репутация:
12
|
|
оператор foreaM ты гарантированно получишь каждый элемент, поскольку не потребуется вручную устанавливать цикл и запрашивать счетчик, а оператор, содержащийся в цикле, автоматически поместит элемент в указанную тобой переменную — достаточно лишь сослаться на нее в этом операторе.
|
|
|

03.03.2010, 00:05
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
какие мы умные, а теперь прочитайте первый пост темы
|
|
|

03.03.2010, 00:06
|
|
Новичок
Регистрация: 24.03.2009
Сообщений: 18
Провел на форуме: 147876
Репутация:
12
|
|
Оу, сори
|
|
|

03.03.2010, 00:08
|
|
Участник форума
Регистрация: 02.02.2009
Сообщений: 146
Провел на форуме: 1093500
Репутация:
43
|
|
PHP код:
foreach($keys as $i=>$key)
{
echo $key;
if($key == ...)
$keys[$i-1];
}
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|