PHP: Prüfung auf Existenz einer Zelle in einem mehrdimensionalen Array
Lesezeit: 4 Minuten
shealtiel
Ich habe ein Array mit zahlreichen Dimensionen und möchte auf das Vorhandensein einer Zelle testen.
Der folgende kaskadierte Ansatz ist mit Sicherheit ein sicherer Weg, dies zu tun:
if (array_key_exists($arr, 'dim1Key'))
if (array_key_exists($arr['dim1Key'], 'dim2Key'))
if (array_key_exists($arr['dim1Key']['dim2Key'], 'dim3Key'))
echo "cell exists";
Aber gibt es einen einfacheren Weg?
Darauf gehe ich näher ein:
Kann ich diese Prüfung in einer einzigen Anweisung durchführen?
Muss ich array_key_exist verwenden oder kann ich so etwas wie isset verwenden? Wann verwende ich sie und warum?
Markus B
isset() ist die kanonische Testmethode, selbst für mehrdimensionale Arrays. Es sei denn, Sie müssen genau wissen, welche Dimension fehlt, dann so etwas wie
isset($arr[1][2][3])
ist durchaus akzeptabel, auch wenn die [1] und [2] Elemente sind nicht vorhanden (3 kann nicht existieren, es sei denn, 1 und 2 sind vorhanden).
Vielleicht hilft diese Analogie. Stellen Sie sich eine PHP-Variable (eine tatsächliche Variable, ein Array-Element usw.) als Karton vor:
isset() schaut in die Box und findet heraus, ob der Inhalt der Box in etwas typisiert werden kann, das “nicht null” ist. Es ist egal, ob die Box existiert oder nicht – es interessiert nur der Inhalt der Box. Wenn die Box nicht existiert, kann sie offensichtlich nichts enthalten.
array_key_exists() überprüft, ob die Box selbst existiert oder nicht. Der Inhalt des Kartons ist irrelevant, es wird nach Kartonspuren gesucht.
Vielen Dank. Wenn ja, warum sollte man überhaupt array_key_exists verwenden?
– shealtiel
2. Januar 2011 um 1:45 Uhr
@gidireich: genau deswegen. Zwischen einem vorhandenen und einem vorhandenen Schlüssel unterscheiden zu können null Wert und einen Schlüssel, der überhaupt nicht existiert. Was nur ein Grund ist, wenn es dir wichtig ist.
– Jon
2. Januar 2011 um 1:48 Uhr
mit isset Ihre Überprüfung, ob der Schlüssel und der Wert vorhanden oder nicht null sind, mit array_key_exists Ihre Überprüfung, ob die Schlüssel existiert unabhängig davon, ob die Werte ist null
– Robert Pitt
2. Januar 2011 um 1:56 Uhr
Benutzer1327498
Ich hatte das gleiche Problem, außer dass ich es für einige Drupal-Sachen brauchte. Ich musste auch überprüfen, ob Objekte sowohl Elemente als auch Arrays enthielten. Hier ist der Code, den ich erstellt habe, es ist eine rekursive Suche, die prüft, ob Objekte sowohl den Wert als auch Arrays enthalten. Dachte, jemand könnte es nützlich finden.
Beachten Sie, dass nur weil ‘#object’ als Objekt bezeichnet wird, dies nicht bedeutet, dass dies der Fall ist. Meine rekursive Suche würde auch wahr zurückgeben, wenn dieser Ort existierte
$variables->content->body['#object']->body['und']
Kwadz
Wenn Sie überprüfen möchten $arr['dim1Key']['dim2Key']['dim3Key']um sicherzugehen, müssen Sie vorher prüfen, ob alle Arrays vorhanden sind dim3Key. Dann können Sie verwenden array_key_exists.
Also ja, es gibt einen einfacheren Weg mit einer einzigen if Aussage wie die folgende:
if (isset($arr['dim1Key']['dim2Key']) &&
array_key_exists('dim3Key', $arr['dim1Key']['dim2Key'])) ...
Ich ziehe es vor, eine Hilfsfunktion wie die folgende zu erstellen: