in_array和多维数组

时间:2011-11-01 16:22:57

标签: php arrays

我正在尝试在类似于此的数组上执行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']与var匹配,in_array()是否正确?我可以在像上面那样的多维数组中使用它吗?

1 个答案:

答案 0 :(得分:0)

如果您正在寻找特定的id索引,那么in_array()将无法执行您想要执行的操作,因为该函数对值而不是键进行操作。这意味着如果您正在搜索特定的id,如果其他键恰好具有您要搜索的值,则该函数将返回true,即使没有id具有该值。

如果您的多维数组总是只是一维数组的数组,那么您可以执行以下操作:

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。如果您不想要整个数组,请将其修改为返回您喜欢的任何内容。

如果你的子数组本身可以有子数组,你可以只重写函数来递归。