Ich habe ein assoziatives Array und muss die numerische Position eines Schlüssels finden. Ich könnte das Array manuell durchlaufen, um es zu finden, aber gibt es eine bessere Möglichkeit, PHP zu integrieren?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
array("val1", "val2", "car" => "val3")
es erzeugt0
, was falsch ist ...http://php.net/manual/en/function.array-keys.php
quelle
quelle
quelle
Während die Antwort von Fosco nicht falsch ist, gibt es einen Fall, der bei diesem berücksichtigt werden muss : gemischte Arrays. Stellen Sie sich vor, ich habe ein Array wie dieses:
PHP erlaubt diese Art von Syntax, hat aber ein Problem: Wenn ich den Code von Fosco ausführe, erhalte ich
0
den für mich falschen , aber warum passiert das?Denn wenn PHP Vergleiche zwischen Zeichenfolgen und Ganzzahlen durchführt, konvertiert es Zeichenfolgen in Ganzzahlen (und das ist meiner Meinung nach ein bisschen dumm). Wenn also
array_search()
nach dem Index gesucht wird, stoppt es beim ersten, weil es anscheinend("car" == 0)
wahr ist .Die Einstellung
array_search()
auf den strengen Modus löst das Problem nicht, da dannarray_search("0", array_keys($a))
false zurückgegeben wird, selbst wenn ein Element mit dem Index 0 vorhanden ist.Meine Lösung konvertiert also einfach alle Indizes von
array_keys()
in Zeichenfolgen und vergleicht sie dann korrekt:Druckt
1
, was richtig ist.BEARBEITEN:
Wie Shaun im Kommentar unten ausgeführt hat, gilt das Gleiche für den Indexwert, wenn Sie zufällig nach einem int-Index wie diesem suchen:
Sie werden immer bekommen
0
, was falsch ist, also wäre die Lösung, den Index (wenn Sie eine Variable verwenden) in eine Zeichenfolge wie diese umzuwandeln:quelle
var_dump(array_search(0, array_map("strval", array_keys($a))));
wird immer ausgegebenint (0)
und nichtbool (false)
.Eine Lösung, die ich mir ausgedacht habe ... wahrscheinlich ziemlich ineffizient im Vergleich zu Foscos Lösung:
quelle
array_search
, was zuerst eine Sortierung durchführt und so schmerzhaft langsam ist.Alle auf array_keys basierenden Lösungen funktionieren nicht für gemischte Arrays. Die Lösung ist einfach:
Von php.net: Wenn der dritte Parameter strict auf TRUE gesetzt ist, sucht die Funktion array_search () nach identischen Elementen im Heuhaufen. Dies bedeutet, dass auch ein strikter Typvergleich der Nadel im Heuhaufen durchgeführt wird und die Objekte dieselbe Instanz sein müssen.
quelle