PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘Array’ tag

POST-Request mit mehreren gleichen Parametern verschicken

with 26 comments

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

Weiterlesen »

Written by Michael Kliewe

September 5th, 2012 at 10:34 am

Posted in PHP

Tagged with , , , ,

Per Index auf einen assoziativen Array zugreifen

with 13 comments

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]];

Written by Michael Kliewe

Juli 13th, 2011 at 8:42 am

Posted in PHP

Tagged with , ,