Facebook
Twitter
Google+
Kommentare
0

Per Index auf einen assoziativen Array zugreifen

Hä? Was ist das denn für eine Überschrift? Das geht doch garnicht! Richtig, normalerweise geht das nicht, aber mit etwas tricksen schon.

Wir haben das folgende Array und möchten den 4. Wert haben, ohne aber den Key zu kennen. Bei einem 0-basierten Array wäre es also das Element mit dem Index 3:

<?php

$array = array(
    '10.07.2011' => 14,
    '11.07.2011' => 51,
    '12.07.2011' => 46,
    '13.07.2011' => 9,
    '14.07.2011' => 20,
    '15.07.2011' => 37,
);

echo $array[3];

Wie zu erwarten erhalten wir eine Notice und keinen Wert:

Notice: Undefined offset: 3 in test.php on line 12

Doch wie kommen wir nun an das 4. Array-Element? Ich habe 3 Möglichkeiten für euch, zuerst die unschönen:

$i=0;
foreach ($array as $a) {
    if ($i == 3) {
        echo $a;
        break;
    }
    $i++;
}

Bei einem großen Array ist diese Methode natürlich sehr langsam. Vergleichbar schlecht der folgende Code:

for ($i=0; $i<3; $i++) {
    next($array);
}
echo current($array);

Besser ist die folgende Lösung:

echo current(array_slice($array, 3, 1));

Wer kennt noch eine?

Edit:

Zwei weitere Lösungen aus den Kommentaren, wahrscheinlich irgendwo in der Mitte anzusiedeln was die Geschwindigkeit bei sehr großen Arrays angeht:

$values = array_values($array);
echo $values[3];

Mit PHP 5.4 geht es sogar noch kürzer ohne das “Zwischenarray”:

echo array_values($array)[3];

Oder aber auch:

$keys = array_keys($array);
echo $array[$keys[3]];

PHP 5.4:

echo $array[array_keys($array)[3]];

flattr this!

Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen