PHP Foreach If Array Last

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 в комментариях, но не уверен, какой лучший подход был бы, какие-либо идеи? Благодаря!

Функция end() – это то, что вам нужно:

 if(end($tabs2) !== $name){ echo ' |'; // not the last element } 

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

 $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 вместе.

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


     $ last = count ($ array);
     $ counter = 1;
     foreach ($ array as $ key => $ val) {
     if ($ counter! = $ last) {
         // все ключи, кроме последнего
         // сделай что-нибудь     
        $ Счетчика ++;  // добавим счетчик к счетчику
         }
         else {
             // это для последнего ключа
     } // end else

 } // end foreach

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

 $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); 

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 "|"; } 

Что-то вроде этого возможно:

 $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>'); } 

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

Функция 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>