2016-08-06 56 views
1

我有一個多維數組,例如:PHP搜索子值的父鍵多維數組

$array[ 'ex1' ] = array('link', '915', '716'); 
$array[ 'am2' ] = array('image', '37', '685'); 
$array[ 'ple' ] = array('video', '354', '675'); 

如果我打電話$array[$ID][0]我得到link,太棒了!

如果我搜索link我需要得到主密鑰,在這種情況下ex1

這是我目前的解決方案:

foreach($array as $key => $value) { 
if(in_array('link', $value)) { $ID = $key; } 
} 

有沒有更好的方式來設置數組或搜索父母的鑰匙?

編輯

如果我改變陣列格式是這樣的:

$array[] = array('ex1', 'link', '915', '716'); 
$array[] = array('am2', 'image', '37', '685'); 
$array[] = array('ple', 'video', '354', '675'); 

我想這是更容易array_search('link', array_column($array, 1, 0)) 得到$ ID但後來我看不懂!例如:echo($array[$ID][0]) // should output link

哪個更好的解決方案?

回答

2

您可以使用array_search這樣

foreach($array as $k => $v) { 
    $ind = array_search("link",$array[$k]) 
    if ($ind) { $ID = $k; break; } 
} 

而當你走出這個循環中,你可以檢索「鏈接」與$array[$ID][$ind]

從你這裏的方法不同的是,你沒有得到的只是truefalsein_array,但你也有array_search搜索塊中獲得「鏈接」的索引。

當然,當您搜索不存在的密鑰時,這當然不會解決您的問題。使用你的例子,

$array[] = array('ex1', 'link', '915', '716'); 
$array[] = array('am2', 'image', '37', '685'); 
$array[] = array('ple', 'video', '354', '675'); 

如果你使用這種方法搜索'alpha',你會得到一個錯誤。在安全的解決方案會像

$ID = false 
foreach($array as $k => $v) { 
    $ind = array_search($needle,$array[$k]) 
    if ($ind) { $ID = $k; break; } 
} 
if ($ID) { 
    $element = $array[$ID][$ind] 
} else { 
    // The item searched for does NOT exist 
} 

這將搜索在草堆$array你所希望的方式在$needle的價值,我想。