Mehrdimensionaler Array durchsuchen

Grossmeister

Grünschnabel
Hallo zusammen!

Ich weiss nicht, wie viele Stunden ich jetzt schon mit Suchen verbracht habe, aber irgendwie scheint bis jetzt noch keine Lösung zu meinem Problem zu existiert, oder ich sehe vor lauter Bäumen den Wald nicht mehr.

Es geht um PHP-Arrays. Genauer gesagt um das Durchsuchen eines mehrdimensionalen Array. Zum Beispiel einem solchen:

PHP:
$array = array (
    array("nummer" => "123", "titel" => "null"),
    array("nummer" => "234", "titel" => "eins"),
    array("nummer" => "666", "titel" => "zwo"),
    array("nummer" => "654", "titel" => "drei")
);

Ich suche nach einer Funktion oder einem Lösungsweg, mit dessen Hilfe dieser Array nach einer bestimmten Zeichenkette durchsuchbar ist. Als Ausgabe sollte dann der Key des (gefundenen) Eintrages erscheinen.

Ich durchsuche den obigen Array z.B. nach der "666" und die Funktion liefert mir den Key es beinhaltenden Arrays, in diesem Fall wäre das die 2. Der Eintrag kann dann mit z.B. $array[2]["titel"] ausgelesen werden (liefert "zwo"). Aber eben, wie komme ich zur "ID-Angabe" des "verschachtelten" Arrays (die [2])?

So wie ich das sehe - korrigiert mich, wenn ich falsch liege - suche ich eine Funktion wie array_search, nur eben so, dass sie auch für einen mehrdimensionaler Array nutzbar ist.

Ich hoffe, ich habe mein Problem genügend gut formuliert, sonst bitte einfach Fragen. Dass ganze muss doch irgendwie gehen, oder mache ich einen Fehler im Gedankengang?

Danke jetzt schon fürs überlegen! :)
 
Hallo,

wenn es keine fertige Funktion gibt, dann halt eben „zu Fuß“:
PHP:
<?php

function array_search_multi($needle, $haystack, $key, $strict=false) {
	foreach ($haystack as $idx => $value) {
		if (($strict && $value[$key] === $needle) ||
			(!$strict && $value[$key] == $needle)) return $idx;
	}
	return null;
}

$array = array (
    array("nummer" => "123", "titel" => "null"),
    array("nummer" => "234", "titel" => "eins"),
    array("nummer" => "666", "titel" => "zwo"),
    array("nummer" => "654", "titel" => "drei")
);

echo array_search_multi("666", $array, "nummer"); # => 2

?>
[edit]$strict hinzugefügt[/edit]

Grüße,
Matthias
 
Zuletzt bearbeitet:
Matthias, du bist der Beste! Herzlichen Dank - ist genau das was ich benötige. Läuft ausgezeichnet. :)

Gruss aus der Schweiz und nochmals Dankeschön!
 
Zurück