【问题标题】:in_array and multidimensional arrayin_array 和多维数组
【发布时间】:2011-11-01 16:22:56
【问题描述】:

我正在尝试在看起来与此类似的数组上执行 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
        )

)

我想检查是否有任何数组具有与 var 匹配的 ['id'],in_array() 是否是正确的函数?我可以在像上面那样的多维数组上使用它吗?

【问题讨论】:

标签: php arrays


【解决方案1】:

如果您正在寻找特定的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。如果您不只想要整个数组,请修改它以返回您喜欢的任何内容。

如果您的子数组本身可以有子数组,您只需将函数重写为递归即可。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2019-03-31
    • 2020-04-27
    • 1970-01-01
    • 2014-07-26
    • 2015-07-27
    相关资源
    最近更新 更多