Frage

Ich bin Schleife durch ein assoziatives Array mit foreach. Ich möchte in der Lage sein zu überprüfen, ob das Schlüsselwertpaar gehandhabt wird die letzte so ist, ich kann es gebe eine besondere Behandlung. Irgendwelche Ideen, wie ich tun kann dies der beste Weg?

foreach ($kvarr as $key => $value){
   // I'd like to be able to check here if this key value pair is the last
   // so I can give it special treatment
}
War es hilfreich?

Lösung

Angenommen, Sie sind nicht das Array zu verändern, während sie durch das Iterieren Sie einen Zähler halten könnte, die in der Schleife dekrementiert und sobald es 0 erreicht, sind Handling Sie das letzte:

<?php
$counter = count($kvarr);
foreach ($kvarr as $key => $value)
{
    --$counter;
    if (!$counter)
    {
        // deal with the last element
    }
}
?>

Andere Tipps

So einfach das, frei von Zählern und andere 'Hacks'.

foreach ($array as $key => $value) {

   // your stuff

   if (next($array) === false) {
      // this is the last iteration
   }
}

Bitte beachten Sie, dass Sie === verwenden, da die Funktion next() einen Nicht-Booleschen Wert zurückgeben kann, die wertet false, wie 0 oder „“ (leere Zeichenkette).

Wir brauchen nicht durch das Array mit foreach iterieren, können wir das Ende () Taste () und Strom () PHP-Funktionen auf das letzte Element zu bekommen verwenden und es ist Schlüssel + Wert.

<?php

$a = Array(
  "fruit" => "apple",
  "car" => "camaro",
  "computer" => "commodore"
);

// --- go to the last element of the array & get the key + value --- 
end($a); 
$key = key($a);
$value = current($a);

echo "Last item: ".$key." => ".$value."\n";

?>

Wenn Sie es in der Iteration überprüfen mögen, das Ende () Funktion kann noch nützlich sein:

foreach ($a as $key => $value) {
    if ($value == end($a)) {
      // this is the last element
    }
}

Es gibt durchaus ein paar Möglichkeiten, dass andere Antworten werden ohne Zweifel zeigen zu tun. Aber ich würde vorschlagen, SPL und sein cachingIterator . Hier ein Beispiel:

<?php

$array = array('first', 'second', 'third');

$object = new CachingIterator(new ArrayIterator($array));
foreach($object as $value) {
    print $value;

    if (!$object->hasNext()) {
        print "<-- that was the last one";
    }
}

Es ist ausführlicher als einfache foreach, aber nicht allzu viel. Und all die verschiedenen SPL Iteratoren für Sie eine ganz neue Welt eröffnen, sobald Sie sie lernen :) Hier ist ein schönes Tutorial.

Sie können die Array-Zeiger-Traversal-Funktionen (speziell verwenden next ), um zu bestimmen, ob es ein anderes Element nach dem aktuellen ist:

$value = reset($kvarr);
do
{
  $key = key($kvarr);
  // Do stuff

  if (($value = next($kvarr)) === FALSE)
  {
    // There is no next element, so this is the last one.
  }
}
while ($value !== FALSE)

Beachten Sie, dass diese Methode funktioniert nicht, wenn Sie Ihre Array-Elemente, deren Wert enthält, ist FALSE, und Sie werden das letzte Element nach dem üblichen Schleifenkörper zu tun (weil der Array-Zeiger vorgerückt wird durch den Aufruf next) oder auch behandeln müssen memoize den Wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top