2016-08-06 13 views
1

多次元配列内の子値の親キーを検索します。私は$array[$ID][0]を呼び出す場合PHPは、たとえば、私は多次元配列を持っている

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

は私がlinkを取得し、素晴らしいです!

私はlinkを検索する場合、私はこのケースでex1

これは私の現在のソリューションであり、親キーを取得する必要があります。

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

は配列を設定したり、検索する良い方法はあります親キー?

EDIT

私は、このように配列形式を変更する場合:

$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]で「リンク」を取得することができます。

ここにあなたの方法との違いは、あなただけのtrueまたはfalsein_arrayのように得ることはありませんが、あなたはまた、検索ブロック内array_searchで「リンク」のインデックスを取得することです。

これは、存在しないキーを検索しても問題は解決しません。例を使用して、

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

この方法で「アルファ」を検索するとエラーが発生します。安全な解決策は、これは、干し草の山に$needleに値を検索しまう$arrayあなたが望むように

$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 
} 

ようなものだと思います。

関連する問題