HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 537


Question есть ли способ управлять foreach?

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

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

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

foreach($keys as $key)
{

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

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


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

  #2  
Старый 01.03.2010, 14:09
Kaimi
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
С нами: 9851426

Репутация: 1676


По умолчанию

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

  #3  
Старый 01.03.2010, 14:11
oRb
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
С нами: 9477026

Репутация: 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
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

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

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
С нами: 10562786

Репутация: 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() ещё более ужасен в плане красоты кода


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

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

Репутация: 43
По умолчанию

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

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

Репутация: 12
По умолчанию

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

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

Репутация: 3338


По умолчанию

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

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

Репутация: 12
По умолчанию

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

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

Репутация: 43
По умолчанию

PHP код:

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

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

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



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



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


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




ANTICHAT ™ © 2001- Antichat Kft.