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

Discussion in 'PHP' started by Дикс, 1 Mar 2010.

  1. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    а вот и нет, вопрос был про foreach )) Ну просто представь себе, нет while
     
  2. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
    вот смотри его код
    PHP:
    foreach($keys as $key)
    {

    echo 
    $key;
    if(
    $key == ...)
    prev($key); // не работает 
    }
    ясен хрен не будет работать prev()
    $key этож не массив


    а если попробовать так(просто поправка скрипта ТСа :) )
    PHP:
    $keys=range(1,100);


    foreach(
    $keys as $i=>$key)  
    {  
    echo 
    $key."<br>";
    if(
    $key == 20){echo prev($keys)."<br>";}

     
    1 person likes this.
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    вот теперь да)
     
  4. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
    тс пропал наверно уже неактуал тема ))
     
  5. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Поставим жирную точку!

    Foreach не умеет возможности управлением индексом, он всегда идет от первого к последнему элементу.

    Но если вам все таки требуется такая возможность, то решается она с помощью цикла While

    Далее код демонстрирующий как это делается:
    PHP:
    <?php
    $array 
    = array ( 'a''b''c''d''e''f') ;

    //Флаг направления, закоментируй одну из двух
    $flag 0;reset($array); //вперед
    //$flag = 1;end  ($array); //назад


    while($value current($array)){
        echo 
    $value."\r\n<br>";
        if(
    $flag == 0){         //Следующий элемент
            
    next($array);    
        }elseif(
    $flag == 1){    //Предыдущий элемент
            
    prev($array);
        }
    }

    ?>
    То есть внутри цикла вы можете как угодно вертеть направление прохода, то туда то обратно, сколько вам вздумается.
     
    _________________________