in_array()和多维数组

287

我使用 in_array() 检查数组中是否存在一个值,如下所示:

$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a)) 
{
    echo "Got Irix";
}

//print_r($a);

但是对于多维数组(如下),我该如何检查该值是否存在于多维数组中?

$b = array(array("Mac", "NT"), array("Irix", "Linux"));

print_r($b);

当处理多维数组时,我是否不应该使用in_array()函数?


1
已接受的解决方案在进行非严格比较时可能会导致意外结果,这是由于 PHP 的类型转换。请参见:https://dev59.com/Hm855IYBdhLWcg3w0H53#48890256 - Paolo
@Paolo 谢谢你的评论。那么解决办法是什么呢?是你刚刚发表的回答吗? - Run
1
我的答案和jwueller的答案都是你问题的正确答案。我提出了一种替代方案,扩展了jwueller的函数,以避免PHP在进行非严格比较时的常见陷阱。 - Paolo
1
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0); 的一句话代码。 - Agnius Vasiliauskas
1
@AgniusVasiliauskas 聪明的解决方案,但如果第一级数组包含一个不是数组的项,则存在问题,例如:$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux")); - Paolo
1
@Paolo 没有人阻止您根据自己的需求扩展匿名函数 - 在这种情况下,可以在匿名函数中使用 is_array() 函数检查变量 $tmp 是否为数组。如果不是数组,则继续执行不同的方案。 - Agnius Vasiliauskas
24个回答

0

这是针对基于数据库结果集创建的多维数组的简化版本。

function in_array_r($array, $field, $find){
    foreach($array as $item){
        if($item[$field] == $find) return true;
    }
    return false;
}

$is_found = in_array_r($os_list, 'os_version', 'XP');

如果 $os_list 数组在 os_version 字段中包含“XP”,则返回。


0

实际上,array_search不是递归的,所以这不起作用。我希望它能够实现,因为这样非常简洁和简单。http://php.net/manual/en/function.array-search.php - MatthewLee

0

我找到了一个非常简单的解决方案:

如果你的数组是:

Array
(
[details] => Array
    (
        [name] => Dhruv
        [salary] => 5000
    )

[score] => Array
    (
        [ssc] => 70
        [diploma] => 90
        [degree] => 70
    )

)

那么代码将会是这样的:

 if(in_array("5000",$array['details'])){
             echo "yes found.";
         }
     else {
             echo "no not found";
          }

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接