2012-01-30 20 views
6

Decir que tengo una matriz tales como:array_filter y matriz multidimensional

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

me gustaría obtener el nombre correspondiente a un determinado ID de modo que pueda hacer:

$name = findNameFromID(43); 

y obtener, por ejemplo, "Cuarto".

Pensé en usar array_filter pero estoy un poco atascado en cómo pasar correctamente una variable. He visto preguntas como this one, pero parece que no puedo extender la solución a una matriz multidimensional.

¿Algún ayuda?

Respuesta

11
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 y superior

EDITAR

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

editar # 2

Y a partir de PHP 5.5, podemos use array_column()

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