2012-01-30 15 views
6

Dire che ho una serie come ad esempio:array_filter e array multidimensionale

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

Vorrei ottenere il nome corrispondente a un determinato ID in modo che io possa fare:

$name = findNameFromID(43); 

e ottenere, per esempio, "Quarto".

Ho pensato di utilizzare array_filter ma sono un po 'bloccato su come passare correttamente una variabile. Ho visto domande come this one ma non riesco a estendere la soluzione a un array multidimensionale.

Qualsiasi aiuto?

risposta

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 e superiori

EDIT

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'; 
} 

EDIT # 2

E da PHP 5.5, possiamo utilizzare array_column()

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