web-dev-qa-db-fra.com

PHP Foreach si dernier tableau

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

J'utilise une boucle foreach pour créer la navigation d'un plugin WordPress sur lequel je travaille, mais je ne veux pas de '|' Pour être affiché pour le dernier élément, le code ci-dessus est ce que j’ai eu jusqu’à présent. Je pensais utiliser une déclaration if sur la ligne commentée, mais je ne savais pas quelle serait la meilleure approche, des idées? Merci!

19
Kristian Matthews

La fonction end() est ce dont vous avez besoin:

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

La première chose que vous devez savoir quelle est la clé last du tableau est de rechercher la longueur du tableau à l’aide de la fonction count ().
Après nous allons créer un compteur et ajouter +1 à chaque boucle. 
Si le compteur et la dernière clé sont égaux, c’est la dernière clé.


 $ last = count ($ array); 
 $ compteur = 1; 
 foreach ($ array comme $ key => $ val) {
 if ($ counter! = $ last) {
 // toutes les clés sauf la dernière 
 // faire quelque chose     
 $ counter ++; // ajoute un pour contrer le compte 
 } 
 autre {
 // c'est pour la dernière clé 
 } // end else 

} // end foreach 

1
Shahar

end () est une bonne fonction à utiliser

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

ou vous pouvez le faire manuellement pour plus de compréhension 

  $copyofarry = $tabs2;
    $last = array_pop($copyofarry);
    foreach( $tabs2 as $tab2 => $name ){
        if($last == $name)
         echo "|";
    }
1

Je ferais comme ça: 

$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
stravanato

Je trouve qu'il est plus facile de vérifier d'abord, plutôt que le dernier. Donc, je le ferais plutôt comme ça.

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

J'ai également combiné les deux derniers echos ensemble.

1
Waynn Lue

Pourquoi ne pas faire apparaître le dernier élément en premier? Vous n'avez donc pas besoin de vérifier si l'élément en cours est le dernier élément de chaque itération. 

La fonction array_pop (& $ array) renvoie le dernier élément et le supprime du tableau. 

<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

Quelque chose comme cela est possible:

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