Ответ 1
Функция end()
- это то, что вам нужно:
if(end($tabs2) !== $name){
echo ' |'; // not the last element
}
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){ // 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
Я бы сделал так:
$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>