2010-02-03 10 views

Antwort

53
$array[count($array)-2] 

Es sollte ein numerisch indexiertes Array (von Null) sein. Sie sollten mindestens 2 Elemente haben, damit dies funktioniert. (Offensichtlich)

+0

Vielen Dank. Und alles. –

+3

Eriks Antwort ist korrekter, er berücksichtigt nicht nur den Fall, den er mit nicht-sequentiellen Schlüsseln angibt, sondern arbeitet auch mit assoziativen Arrays (Arrays mit Strings als Schlüssel) –

+1

Die Frage lässt leicht vermuten, dass das Subjekt ein lineares Array ist . Wenn das Array ein einzelnes Element enthält und error_reporting (E_ALL) gesetzt ist, schlägt meine Lösung mit 'Notice: Undefined offset: -1 in /test.php in Zeile 3' fehl. Eriks Lösung schlägt lautlos. Das ist schlecht. – Notinlist

110

Dies funktioniert sogar auf diesem Array:

$array[0] = "hello"; 
$array[5] = "how"; 
$array[9] = "are"; 

end($array); 
echo prev($array); // will print "how" 

Die anderen Lösungen count() geht davon aus, dass der Indizes des Array gehen, um; Indem Sie end und prev verwenden, um den Array-Zeiger zu verschieben, erhalten Sie die tatsächlichen Werte. Versuchen Sie es mit der count() -Methode für das obige Array und es wird fehlschlagen.

+4

Das ist brilliant. Ich habe versucht, die mit dem Häkchen markierte Lösung zu verwenden, konnte aber nicht mit meinen Arrays arbeiten (alles von 1 bis 20 möglichen Zählungen). Ihre Lösung hat wie ein Zauber funktioniert. Danke. –

6

Eine Methode, die sowohl für assoziative Array und numerische Array funktioniert, ist array_pop() zu verwenden, um das Element vom Ende des Arrays Pop.

$last = array_pop($array); 
$second_last = array_pop($array); 

// put back the last 
array_push($array, $last); 
+0

@ + 1: tolle Idee. Danke – Gowri

15

array_slice nimmt einen negativen Offset als zweites Argument. Dadurch erhalten Sie ein einzelnes Element Array die zweite letzte Objekt vorkommt:

$arr = array(1,2,3,4,5,6); 
array_slice($arr, -2, 1); 

Wenn Sie nur den einzigen Wert wollen auf seine eigene haben Sie mehrere Möglichkeiten. Wenn es Ihnen nichts ausmacht, eine Zwischenvariable zu verwenden, können Sie einfach den ersten Wert mit [0] abrufen oder array_pop oder array_shift aufrufen, beide benötigen eine Variable, die als Referenz übergeben wird, oder Sie erhalten Warnungen im strikten Modus.

Oder Sie könnten einfach array_sum oder array_product verwenden, die ein bisschen hacky ist, aber funktioniert gut für einzelne Artikel-Arrays.

+0

Schöne flexible Lösung für variable Punkte in einem Array. implode ('', array_slice ($ arr, -2, 1)) bekommt es in einer Zeile. – Praesagus

11

Was mich ziemlich klein Lösung

end($array); 
echo prev($array); 
+1

Dies ist die beste Antwort, die akzeptierte Antwort ist im Vergleich schrecklich. – TarranJones

2
// Indexed based array 
$test = array('a','b','c','d','e'); 
$count = count($test); 
print $test[$count-2]; 

// Associative Array 
$months = array(
     'jan'=>'January', 
     'feb' => 'february', 
     'mar' => 'March', 
     'apr' => 'April' 
    ); 

$keys = array_keys($months); 
$count = count($keys); 
print $keys[$count-2]; 
2

Alle Arrays haben eine „interne Array-Zeiger“ die dem aktuellen Array-Element verweist, hat PHP mehrere Funktionen, die Ihnen erlauben, durch die navigieren Array und Anzeigen der aktuellen Elemente Schlüssel und Wert.

  • end() - Einstellen der internen Zeiger eines Arrays auf dem letzten Element
  • reset() - Einstellen der internen Zeiger eines Arrays auf sein erstes Element
  • prev() - Zurückspulen der interne Zeiger
  • next() - Weiterleiten des internen Array-Zeigers eines Arrays
  • current() - Zurückgeben des aktuellen Elements in einem Array
  • key() - Holt einen Schlüssel von einem Array
  • each() - Liefert die aktuellen Schlüssel und Wertepaar aus einem Array und rückt den Array Cursor

Diese Funktionen arbeiten, ob das Array leer ist, sequenziellen oder assoziativ und als Array wurde im Beispiel nicht angegeben Ich habe angenommen, dass dies mit jedem Array funktionieren muss.

$array = array(
    'before_last' => false, 
    'last' => false, 
); 

end($array); /* 
- set pointer to last element -> $array['last'] 
- return new current element value if it exists, -> false 
- else return FALSE 
*/ 

prev($array); /* 
- set pointer one place before current pointer -> $array['before_last'] 
- return new current element value if it exists, -> false 
- else return FALSE 
*/ 

if(!is_null(key($array)){ /* 
- return current element key if it exists -> "before_last" 
- else return NULL 
*/ 
    $before_last_element_value = current($array); /* 
    - return current element value if it exists, -> false 
    - else return FALSE 
    */ 
} 

Wie Sie das erwartete Ergebnis sehen (false) und das Ergebnis für ein nicht vorhandenes Element ist das gleiche (FALSE), so dass Sie kann nicht überprüfen, ob ein Element existiert das zurückgegebene Elementwert verwendet wird, ist ein Element Schlüssel anders.

Der Schlüssel kann entweder integer oder string sein. Der Wert kann type sein. source

Die key() gibt den Wert des aktuellen Schlüssels, wenn das Element existiert sonst wird es NULL zurück. Ein gültiger Schlüssel kann niemals NULL sein. Wenn also null zurückgegeben wird, können wir feststellen, dass das Element nicht existiert.

Verwandte Themen