определить первую и последнюю запись в цикле php .

Тема в разделе "Как сделать...", создана пользователем sarkis, 8 дек 2014.

  1. sarkis

    sarkis

    Регистр.:
    27 фев 2014
    Сообщения:
    249
    Симпатии:
    36
    здравствуйте .
    есть цикл

    Код:
     foreach ($mas_spacecom as $row)
            {
             echo $row;
    }
    
    в итоге выведет ,к примеру , 5 блоков ..
    <img src='image1.png'>
    <img src='image2.png'>
    <img src='image3.png'>
    <img src='image4.png'>
    <img src='image5.png'>



    как мне для первого и последнего блока сделать дополнительный <div> или class и т.п ?
    Спасибо
     
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    599
    Симпатии:
    469
    PHP:
    foreach ($mas_spacecom as $key=>$row)
    {
        if ((
    $key==0)or($key==4)) echo '<div>';
        echo 
    $row;
        if ((
    $key==0)or($key==4)) echo '</div>';
    }
    пожалуйста)
     
  3. YellowNight

    YellowNight Писатель

    Регистр.:
    17 мар 2013
    Сообщения:
    0
    Симпатии:
    0
    К примеру, так:

    PHP:
    $first_elem 0// Просто для ясности
    $last_elem sizeof($mas_spacecom) - 1// sizeof() - количество элементов в массиве, а не индекс последнего элемента, поэтому уменьшаем на 1
    $counter 0//
    foreach ($mas_spacecom as $row)
    {
        if (
    == $counter)
        {
            echo 
    "<div>".$row."</div>";
        }
        elseif (
    $last_elem == $counter)
        {
            echo 
    str_replace("src=""class='someclass' src="$row);
        }
        else
        {
            echo 
    $row;
        }
        
    $counter++;
    }
     
  4. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Код:
    $result='';
    foreach ($mas_spacecom as $row)        {
            $result .= $row;
    }
    echo '<div>'.$result.'</div>';
    Или, если уверены что код не будет модифицироваться, отказаться от цикла и можно вовсе в 1 строчку:
    Код:
    echo '<div>'.implode( "\n" , $mas_spacecom ).'</div>';
     
    Последнее редактирование: 8 дек 2014
  5. vitbsd

    vitbsd Постоялец

    Регистр.:
    26 ноя 2009
    Сообщения:
    111
    Симпатии:
    76
    Накалялкал все же :)
    Код:
    <?php
    $arr = array(1,2,3,4,5,6,7,8); // к примеру Ваш массив
    $arr[0] = '<div>'.$arr[0].'</div>';    // изменяем первый элемент массива как вам надо
    $last = '<div>'.array_pop($arr).'</div>';    // изменяем последний элемент массива как вам надо вырезая его из массива
    array_push($arr,$last); // вставляем измененный элемент в массив обратно в конец
        var_dump($arr); // вместо этого делаем что вам надо(форич или что еще)
    ?>
    
     
    Последнее редактирование: 8 дек 2014
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
  7. zaxap83

    zaxap83 Постоялец

    Регистр.:
    6 дек 2010
    Сообщения:
    87
    Симпатии:
    28
    YellowNight верно написал, остальное от лукавого)
    От себя только добавлю - в данном случае обычно применяют цикл for
    PHP:
    $last count($mas_spacecom)-1;
    for(
    $i 0$i <= $last$i++)
        {
            if(
    $i == 0) echo '<div class="first">'.$mas_spacecom[$i].'</div>';
            elseif(
    $i == $last) echo '<div class="last">'.$mas_spacecom[$i].'</div>';
            else echo 
    $mas_spacecom[$i];
        }
     
  8. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    В своё время очень беспокоил подобный вопрос...
    После некоторых "головоломок" родились 4 функции:
    PHP:

      
    function array_get_first$_array$key false )
      {
          if( 
    is_array($_array) && count($_array) == ) {
              return 
    false;
          }

          
    reset($_array);

          
    $k       key($_array);
          
    $element $_array$k ];
         
          unset(
    $_array);
         
          if( 
    $key === true ) return array( $k => $element );
         
          return 
    $element;
      }

      function 
    array_get_first_key$_array )
      {
          if( 
    is_array($_array) && count($_array) == ) {
              return 
    false;
          }

          
    reset($_array);
          
    $k key($_array);
       
          unset(
    $_array);
         
          return 
    $k;
      }
      function 
    array_get_last$_array$key false )
      {
          if( 
    is_array($_array) && count($_array) == ) {
              return 
    false;
          }

          
    end($_array);

          
    $k       key($_array);
          
    $element $_array$k ];
       
          unset(
    $_array);
         
          if( 
    $key === true ) return array( $k => $element );
         
          return 
    $element;
      }

      function 
    array_get_last_key$_array )
      {
          if( 
    is_array($_array) && count($_array) == ) {
              return 
    false;
          }

          
    end($_array);
          
    $k key($_array);

          unset(
    $_array);
       
          return 
    $k;
      }
     
  9. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    У Вас unset ни к чему. В функциях используются локальные переменные, как только функция закончила выполняться, все данные сами сотрутся
     
  10. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    можно конечно убрать... но как показала практика, мусорщик работает с запозданием...
    а на высоконагруженных сайтах использование unset оправданно. Да и вообще оно там не мешает.
    Ну а кто захочет, тот уберёт.