10 Stimmen

Suche ein 2D-Array nach einem Spaltenwert und gib einen anderen Wert aus der qualifizierten Zeile zurück

Sagen wir, ich habe ein Array wie folgt:

$arr[] = array("id" => 11, "name" => "Erste");
$arr[] = array("id" => 52, "name" => "Zweite");
$arr[] = array("id" => 6, "name" => "Dritte");
$arr[] = array("id" => 43, "name" => "Vierte");

Ich möchte den Namen, der zu einer bestimmten ID gehört, bekommen, damit ich folgendes tun kann:

$name = findNameFromID(43);

und zum Beispiel "Vierte" erhalten.

Ich habe daran gedacht, array_filter zu verwenden, aber ich bin ein wenig blockiert, wie ich eine Variable korrekt übergeben soll. Ich habe Fragen wie diese hier gesehen, aber ich scheine nicht in der Lage zu sein, die Lösung auf ein mehrdimensionales Array zu erweitern.

Irgendwelche Hilfe?

14voto

Mark Baker Punkte 204969
findNameFromID($array,$ID) {
     return array_values(array_filter($array, function($arrayValue) use($ID) { return $arrayValue['id'] == $ID; } ));
}

$name = findNameFromID($arr,43);
if (count($name) > 0) {
    $name = $name[0]['name'];
} else {
    echo 'Kein Treffer gefunden';
}

PHP 5.3.0 und höher

BEARBEITEN

oder Variante:

findNameFromID($array,$ID) {
    $results = array_values(array_filter($array, function($arrayValue) use($ID) { return $arrayValue['id'] == $ID; } ));
    if (count($results) > 0) {
        return $name[0]['name'];
    } else {
        return FALSE;
    }
}

$name = findNameFromID($arr,43);
if (!$name) {
    echo 'Kein Treffer gefunden';
}

BEARBEITEN #2

Und ab PHP 5.5 können wir array_column() verwenden

findNameFromID($array, $ID) {
    $results = array_column($array, 'name', 'id');
    return (isset($results[$ID])) ? $results[$ID] : FALSE;
}

0voto

mickmackusa Punkte 36793

Ich glaube nicht, dass es sich lohnen würde, eine benutzerdefinierte Funktion für eine so grundlegende Aufgabe zu deklarieren. Strukturieren Sie das 2D-Array in eine assoziative Map um und versuchen Sie dann, auf die Map-Daten mit dem Suchwert als Schlüssel zuzugreifen. Wenn das Element nicht gefunden wird, fallback auf null.

Code: (Demo)

$find = 43;
var_export(
    array_column($arr, 'name', 'id')[$find] ?? null
);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X