2011-11-01 61 views
0

我试图做一个in_array()对数组将类似于此,in_array和多维数组

Array 
(
    [0] => Array 
     (
      [id] => 40 
      [name] => Simon E Ainley 
      [location] => Huddersfield 
      [talent] => voice over 
      [image] => ./media/uploads/headshots/width_60_249613_10150280293315435_717615434_9570480_8341358_n.jpg 
     ) 

) 

我想检查是否有任何阵列有一个无功相匹配的['id'],是in_array()这个正确的函数?我可以在像上面那样的多维数组上使用它吗?

+0

可能dublicate http://stackoverflow.com/questions/4128323/in-array-and-multidimensional-array – Naeem

回答

0

如果您正在寻找一个特定的id索引,那么in_array()不会做你想做的事情,因为该函数在值而不是键上运行。这意味着如果您正在搜索特定的ID,则即使没有id的值,如果其他键恰好具有您要搜索的值,该函数也会返回true。

如果期多维数组总是只是将是一个维数组的数组,那么你可以做类似如下:

function find_kv_pair($array, $key, $value) { 
    foreach($array as $arr) { 
    if (is_array($arr) && 
     array_key_exists($key, $arr) && 
     $arr[$key] == $value; 
     ) { 
     return $arr; 
    } 
    } 
    return false; 
} 

你可以这样调用它像这样:

if (find_kv_paid($my_array, "id", 123)) !== false) { 
    // do something with the returned array 
} else { 
    // nothing found. handle the condition 
} 

如果数组有一个键/值对'id' => 123,那么子阵列将返回和处理数组,否则你会得到一个错误,你可以相应地处理它。

该函数接受您的子阵列的阵列,并检查每个子阵列,看它是否具有id键符合搜索条件的值。如果找到一个,则返回该子数组,如果没有子数组,则返回false。修改它以返回任何你喜欢的,如果你不只是想要整个数组。

如果你的子阵列可以拥有自己的子阵列,你可以重写的功能是递归的。