在嵌套的php数组中搜索值

时间:2015-03-25 10:47:23

标签: php arrays multidimensional-array

我有一个这样的数组,可以有任意数量的“域”数组。我在这个例子中删除了不必要的密钥。

Array
(
    [result] => success
    [clientid] => 7
    [numreturned] => 2
    [domains] => Array
        (
            [domain] => Array
                (
                    [0] => Array
                        (
                            [domainname] => example.net
                        )

                    [1] => Array
                        (
                            [domainname] => example.com
                        )

                )

        )

)

我需要弄清楚如何检查这个数组以查看它是否包含域名。

我正在尝试做这样的事情:

if(arrayContains("example.com")){
$success = true;
}

我已经尝试了一些我在SO上找到的解决方案,但它们似乎没有起作用。我发现的一个例子是使用了array_key_exists,这与我需要的相反。

有关如何执行此操作的任何建议吗?

3 个答案:

答案 0 :(得分:1)

$array = array(
    "result" => "success",
    "clientid" => 7,
    "numreturned" => 2,
    "domains" => array(
            "domain" => array(
                    0 => array(
                            "domainname" => "somedomain.com",
                            3 => array(
                                "domainname" => "searchdomanin.com",

                                ),
                        ),

                    1 => array(
                            "domainname" => "extwam",
                        ),

                )

        )

);

$succes = FALSE;
$search = 'searchdomanin.com';

array_walk_recursive($array, function($key, $value) use(&$success, &$search){ 
    if($key === $search){
       $success = TRUE;
    }
},
[&$key ,&$val]);

if($success){
    echo 'FOUND';
}

适用于您拥有的任何维度数组。

答案 1 :(得分:1)

使用此功能可以帮助您:

<?php
function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}
?>

这可以在PHP文档中关于array_search()的一条评论中找到。

答案 2 :(得分:0)

尝试这样的事情:

$domains = $arr['domains'];
foreach($domains AS $domain)
{
   foreach($domain AS $internal_arr)
   {
      if($internal_arr['domainname'] == 'example.net')
      {
        $success = true;
      }
   }
}