10

Say I have an array such as:

$arr[] = array("id" => 11, "name" => "First");
$arr[] = array("id" => 52, "name" => "Second");
$arr[] = array("id" => 6, "name" => "Third");
$arr[] = array("id" => 43, "name" => "Fourth");

I would like to get the name correspondent to a certain ID so that I can do:

$name = findNameFromID(43);

and get, for instance, "Fourth".

I thought of using array_filter but I am a bit stuck on how to correctly pass a variable. I have seen questions such as this one but I don't seem to be able to extend the solution to a multidimensional array.

Any help?

mickmackusa
  • 43,625
  • 12
  • 83
  • 136
nico
  • 50,859
  • 17
  • 87
  • 112

2 Answers2

14
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 'No match found';
}

PHP 5.3.0 and above

EDIT

or variant:

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 'No match found';
}

EDIT #2

And from PHP 5.5, we can use array_column()

findNameFromID($array, $ID) {
    $results = array_column($array, 'name', 'id');
    return (isset($results[$ID])) ? $results[$ID] : FALSE;
}
Mark Baker
  • 209,507
  • 32
  • 346
  • 385
0

I don't think I'd bother to declare a custom function for such a basic task. Restructure the 2d array into an associative map, then attempt to access the map data with the search value as the key. Fallback to null if the element is not found.

Code: (Demo)

$find = 43;
var_export(
    array_column($arr, 'name', 'id')[$find] ?? null
);
mickmackusa
  • 43,625
  • 12
  • 83
  • 136