Ziemlich einfach; Ich bin nur neugierig, ob es einen besseren Weg gibt, dies zu erreichen.Multidimensionales Array zu Schlüssel/Wert-Wörterbuch; aus der Funktion zurückgegeben, keine Kontrollstrukturen
ein Array wie folgt gegeben:
(das Ergebnis mit preg_match_all()
PREG_SET_ORDER
)
$matches = array(2) {
[0]=>
array(5) {
[0]=>
string(8) "key=foo;"
["key"]=>
string(3) "key"
[1]=>
string(3) "key"
["value"]=>
string(3) "foo"
[2]=>
string(3) "foo"
}
[1]=>
array(5) {
[0]=>
string(12) "pattern=bar;"
["key"]=>
string(7) "pattern"
[1]=>
string(7) "pattern"
["value"]=>
string(3) "bar"
[2]=>
string(3) "bar"
}
}
Ich möchte in ein Array extrahieren, die folgenden:
array(2) {
["key"]=>
string(3) "foo"
["pattern"]=>
string(3) "bar"
}
Im Wesentlichen ein assoziatives Array von $array[$i]['key'] => $array[$i]['value']
für jede $i
.
(Wenn das verwirrend klingt, sorry, es ist spät)
Wie auch immer, dies ist trivial; jedoch versuche ich dies mit PHP-Kern array_*
Funktionen zu erreichen, die zurückgeben das resultierende Array (Entschuldigung array_walk
).
Nein foreach
oder andere Schleifenkontrollstrukturen.
Im Moment habe ich es bekommen habe, um diese nach unten:
\array_combine(\array_map(function($match) {
return (string) $match['key'];
}, $matches), \array_map(function($match) {
return (string) $match['value'];
}, $matches))
Welche funktioniert, aber es ist nicht genau das prägnante; Ich mag es nicht, array_map
zweimal - einmal für Schlüssel, einmal für Werte.
Gibt es eine weitere elegante Lösung, um verschachtelte Werte aus einem wohlgeformten mehrdimensionalen Array in ein eindimensionales Schlüssel/Wert-Paar-Wörterbuch zu extrahieren?
'$ a = []; array_walk (Funktion ($ m) {$ a [$ m ['Schlüssel']] = $ m ['Wert'];}, $ entspricht); ' – kirilloid
@kirilloid So nah; Ich habe vergessen zu erwähnen, dass 'array_walk' aus ist, weil es' bool' anstelle des resultierenden Arrays zurückgibt. Dieser Aufruf wird als Argument an eine andere Funktion übergeben und das resultierende Array sollte übergeben werden. Danke aber! – Dan
Sie können diesen Anruf in eine andere Funktion umbrechen. Und ich fürchte, es gibt keine kürzere Lösung mit so begrenzten Funktionen * erlaubt *. – kirilloid