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

sarkis

Профессор
Регистрация
27 Фев 2014
Сообщения
248
Реакции
40
здравствуйте .
есть цикл

Код:
 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 и т.п ?
Спасибо
 
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>';
}
пожалуйста)
 
К примеру, так:

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

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 и т.п ?
Спасибо

Код:
$result='';
foreach ($mas_spacecom as $row)        {
        $result .= $row;
}
echo '<div>'.$result.'</div>';

Или, если уверены что код не будет модифицироваться, отказаться от цикла и можно вовсе в 1 строчку:
Код:
echo '<div>'.implode( "\n" , $mas_spacecom ).'</div>';
 
Последнее редактирование:
Накалялкал все же :)
Код:
<?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); // вместо этого делаем что вам надо(форич или что еще)
?>
 
Последнее редактирование:
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];
    }
 
В своё время очень беспокоил подобный вопрос...
После некоторых "головоломок" родились 4 функции:
PHP:
  function array_get_first( $_array, $key = false )
  {
      if( is_array($_array) && count($_array) == 0 ) {
          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) == 0 ) {
          return false;
      }

      reset($_array);
      $k = key($_array);
   
      unset($_array);
     
      return $k;
  }
  function array_get_last( $_array, $key = false )
  {
      if( is_array($_array) && count($_array) == 0 ) {
          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) == 0 ) {
          return false;
      }

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

      unset($_array);
   
      return $k;
  }
 
В своё время очень беспокоил подобный вопрос...
После некоторых "головоломок" родились 4 функции:
PHP:
  function array_get_first( $_array, $key = false )
  {
      if( is_array($_array) && count($_array) == 0 ) {
          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) == 0 ) {
          return false;
      }

      reset($_array);
      $k = key($_array);
  
      unset($_array);
    
      return $k;
  }
  function array_get_last( $_array, $key = false )
  {
      if( is_array($_array) && count($_array) == 0 ) {
          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) == 0 ) {
          return false;
      }

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

      unset($_array);
  
      return $k;
  }
У Вас unset ни к чему. В функциях используются локальные переменные, как только функция закончила выполняться, все данные сами сотрутся
 
У Вас unset ни к чему. В функциях используются локальные переменные, как только функция закончила выполняться, все данные сами сотрутся

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