PHP Foreach, если массив последний - PullRequest
19 голосов
/ 14 марта 2012
foreach( $tabs2 as $tab2 => $name ){
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name");
    echo(' |'); // If array last then do not display
    echo('</a></li>');
}

Я использую цикл foreach для создания навигации для плагина WordPress, над которым я работаю, но я не хочу '|'Чтобы отобразить последний элемент, приведенный выше код - это то, что я получил до сих пор, я думал об использовании оператора if в строке с комментариями, но не уверен, какой будет лучший подход, какие-либо идеи?Спасибо!

Ответы [ 7 ]

63 голосов
/ 14 марта 2012

Вам нужна функция end():

if(end($tabs2) !== $name){
    echo ' |'; // not the last element
}
1 голос
/ 13 октября 2017

end () - хорошая функция для использования

foreach( $tabs2 as $tab2 => $name ){
if(end($tabs2)== $name)
 echo "|";
}

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

  $copyofarry = $tabs2;
    $last = array_pop($copyofarry);
    foreach( $tabs2 as $tab2 => $name ){
        if($last == $name)
         echo "|";
    }
1 голос
/ 30 марта 2015

Я бы сделал так:

$arrLi = array();
foreach( $tabs2 as $tab2 => $name ){
  $class = ( $tab2 == $current ) ? ' current' : '';
  $arrLi[] = "<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>";
}
echo implode('|', $arrLi);
1 голос
/ 26 ноября 2013

Прежде всего вам необходимо выяснить, что является последним ключом массива , и сделать это путем определения длины массива с помощью функции count () .
После слов мы собираемся создать счетчик и добавить +1 в каждом цикле.
Если счетчик и последний ключ равны, то это последний ключ.


    $last = count($array);
    $counter = 1;
    foreach ($array as $key => $val){
    if ($counter != $last){
        // all keys but the last one
        // do something     
       $counter++; // add one to counter count
        }
        else {
            // this is for the last key
    }// end else

}// end foreach

1 голос
/ 14 марта 2012

Мне проще проверить сначала, чем последним.Так что вместо этого я бы сделал это так.

$first = true;
foreach( $tabs2 as $tab2 => $name ){
    if ($first) {
      $first = false;
    } else {
      echo(' | ');
    }
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>");
}

Я также объединил последние два echos.

0 голосов
/ 28 мая 2014

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

Функция array_pop (& $ array) возвращает последний элемент и удаляет его из массива.

<div id="breadcrumb">
    <?php 
        $lastBreadcrumb = array_pop($breadcrumb);
        foreach ($breadcrumb as $crumb){ ?>
            <a href=""><?php echo $crumb; ?></a>
        <?php } ?><span><?php echo $lastBreadcrumb?></span>
</div>
0 голосов
/ 14 марта 2012

Нечто подобное возможно:

$size = count($tabs2);
$counter = 0;
foreach( $tabs2 as $tab2 => $name ){
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name");
    if ( ++$counter < $size ){
        echo(' |'); // If array last then do not display     
    }
    echo('</a></li>');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...