Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   есть ли способ управлять foreach? (https://forum.antichat.xyz/showthread.php?t=183016)

Дикс 01.03.2010 13:58

есть ли способ управлять foreach?
 
думал спросить в теме для новичков, но потом решил что этот вопрос не относится к основам и может быть интересен не только мне.

интересно, есть ли способ управлять foreach?
в частности - при определенном условии вернуть его на предыдущую позицию

т.е. к примеру

foreach($keys as $key)
{

echo $key;
if($key == ...)
prev($key); // не работает
}

суть в том, чтобы в следующей итерации снова повторился текущий ключ


PS я знаю про for(), хочется обойтись без него

Kaimi 01.03.2010 14:09

Цитата:

PS я знаю про for(), хочется обойтись без него
Почему?
Воспользуйся while тогда)

oRb 01.03.2010 14:11

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(15);
while(list(
$value$key) = each($keys)) {
    if(
$key == 3)
        
next($keys);

    echo 
$key "\n";


Результат:
Код:

1
2
3
5


Pashkela 01.03.2010 14:22

если я правильно понял ТС:

PHP код:

<?php 
$array 
range(1,5);
$flag true;
while(
$current current($array)) {
      echo 
$current "<br>";
      
next($array);
      if (
$current == && $flag) {
           
prev($array);
           
$flag false;
      }
}
?>

Результат:
Код:

1
2
2
3
4
5


Дикс 01.03.2010 15:12

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

но тут надо сказать, почему я не хочу использовать 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() ещё более ужасен в плане красоты кода


судя по всему простого решения нет, поэтому всем спасибо, не заморачивайтесь над этим. просто у меня такие вот нездоровые стремления :)

dr.Web 02.03.2010 23:31

PHP код:

next() prev() current() 


criptic 02.03.2010 23:39

оператор foreaM ты гарантированно получишь каждый элемент, поскольку не потребуется вручную устанавливать цикл и запрашивать счетчик, а оператор, содержащийся в цикле, автоматически поместит элемент в указанную тобой переменную — достаточно лишь сослаться на нее в этом операторе.

Pashkela 03.03.2010 00:05

какие мы умные, а теперь прочитайте первый пост темы

criptic 03.03.2010 00:06

Оу, сори

dr.Web 03.03.2010 00:08

PHP код:


foreach($keys as $i=>$key)
{

echo 
$key;
if(
$key == ...)
$keys[$i-1];




Время: 00:25