2012-01-30 64 views
6

說我有一個數組,如:array_filter和多維數組

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

我想獲得名記者到一定的ID,這樣我可以這樣做:

$name = findNameFromID(43); 

,並得到,例如「第四」。

我想過使用array_filter但我有點卡在如何正確傳遞一個變量。我已經看到如this one這樣的問題,但我似乎無法將解決方案擴展到多維數組。

任何幫助?

回答

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及以上

編輯

或變體:

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

編輯#2

而且從PHP 5.5中,我們可以使用array_column()

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