wake-up-neo.com

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

Ich verwende eine foreach-Schleife, um eine Navigation für ein WordPress-Plugin zu erstellen, an dem ich gerade arbeite. Ich möchte jedoch nicht das '|' Um für das letzte Element angezeigt zu werden, ist der Code oben das, was ich bis jetzt habe. Ich dachte daran, eine if-Anweisung in der kommentierten Zeile zu verwenden, aber nicht sicher, was der beste Ansatz wäre, irgendwelche Ideen? Vielen Dank!

19

Die Funktion end() ist genau das, was Sie brauchen:

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

Als Erstes müssen Sie herausfinden, was der letzte Schlüssel des Arrays ist. Dazu müssen Sie die Arraylänge mit der Funktion count () ermitteln.
Nach den Worten werden wir einen Zähler erstellen und in jeder Schleife +1 hinzufügen. 
Wenn der Zähler und der letzte Schlüssel gleich sind, ist dies der letzte Schlüssel.

 $ last = count ($ array); 
 $ counter = 1; 
 foreach ($ array als $ key => $ val) {
 if ($ counter! = $ last) {
 // alle Schlüssel außer dem letzten 
 // etwas tun     
 $ counter ++; // füge einen Zähler hinzu 
 } 
 sonst {
 // Dies ist für den letzten Schlüssel 
 } // Ende sonst 

} // Ende für alle 

1
Shahar

end () ist eine gute Funktion

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

oder Sie können es für ein besseres Verständnis manuell tun 

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

Ich würde so machen: 

$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

Ich finde es einfacher, zuerst und nicht zuletzt zu prüfen. Also würde ich es stattdessen so machen.

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

Ich habe auch die letzten beiden echos kombiniert.

1
Waynn Lue

Warum nicht zuerst das letzte Element platzieren? Sie müssen also nicht prüfen, ob das aktuelle Element das letzte Element in jeder Iteration ist. 

Die Funktion array_pop (& $ array) gibt das letzte Element zurück und entfernt es aus dem 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

So etwas ist möglich:

$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