ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

есть ли способ управлять foreach?
  #1  
Старый 01.03.2010, 13:58
Аватар для Дикс
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
Question есть ли способ управлять foreach?

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

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

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

foreach($keys as $key)
{

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

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


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

  #2  
Старый 01.03.2010, 14:09
Аватар для Kaimi
Kaimi
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме:
18127311

Репутация: 1676


Отправить сообщение для Kaimi с помощью ICQ
По умолчанию

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

  #3  
Старый 01.03.2010, 14:11
Аватар для oRb
oRb
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(15);
while(list(
$value$key) = each($keys)) {
    if(
$key == 3)
        
next($keys);

    echo 
$key "\n";

Результат:
Код:
1
2
3
5
__________________
включи голову
 
Ответить с цитированием

  #4  
Старый 01.03.2010, 14:22
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

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

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
 
Ответить с цитированием

  #5  
Старый 01.03.2010, 15:12
Аватар для Дикс
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

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

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


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

  #6  
Старый 02.03.2010, 23:31
Аватар для dr.Web
dr.Web
Участник форума
Регистрация: 02.02.2009
Сообщений: 146
Провел на форуме:
1093500

Репутация: 43
Отправить сообщение для dr.Web с помощью ICQ
По умолчанию

PHP код:
next() prev() current() 
 
Ответить с цитированием

  #7  
Старый 02.03.2010, 23:39
Аватар для criptic
criptic
Новичок
Регистрация: 24.03.2009
Сообщений: 18
Провел на форуме:
147876

Репутация: 12
Отправить сообщение для criptic с помощью ICQ
По умолчанию

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

  #8  
Старый 03.03.2010, 00:05
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

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

  #9  
Старый 03.03.2010, 00:06
Аватар для criptic
criptic
Новичок
Регистрация: 24.03.2009
Сообщений: 18
Провел на форуме:
147876

Репутация: 12
Отправить сообщение для criptic с помощью ICQ
По умолчанию

Оу, сори
 
Ответить с цитированием

  #10  
Старый 03.03.2010, 00:08
Аватар для dr.Web
dr.Web
Участник форума
Регистрация: 02.02.2009
Сообщений: 146
Провел на форуме:
1093500

Репутация: 43
Отправить сообщение для dr.Web с помощью ICQ
По умолчанию

PHP код:

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

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

 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ по выделенным серверам †Romi4† Авторские статьи 4 31.08.2009 16:19
Фейки dgonik777 E-Mail 34 14.06.2009 04:01
Быстро всем читать это очень интересно. Надо срочно найти этот способ если он есть. White Jordan Болталка 0 27.03.2005 05:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ