Archive for the ‘Array’ tag
POST-Request mit mehreren gleichen Parametern verschicken
Ich hatte ein komisches Problem, bei dem ich auch erstmal nachdenken und nachlesen musste wie ich das gelöst bekomme. Folgende Ausgangssituation:
Ich musste einen POST-Request machen zu einem Webserver. Soweit kein Problem. Doch bei diesem Request war das besondere dass es mehrere POST-Parameter gab mit dem selben Namen. Beispiel:
attr=blue
attr=yellow
attr=green
amount=14
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]];