在嵌套关联数组中查找键

时间:2013-12-15 06:51:49

标签: php multidimensional-array nested associative

前几天我问了一个与此有关的问题,我得到了一个答案,但它没有做我想要的。这是我遍历多维关联数组的方法,检查一个键是否在数组中(从我之前的问题的答案):

private function checkKeyIsInArray($dataItemName, $array)
{
    foreach ($array as $key => $value)
    {
        // convert $key to string to prevent key type convertion
        echo '<pre>The key: '.(string) $key.'</pre>';

        if ((string)$key == $dataItemName)
            return true;

        if (is_array($value))
            return $this->checkKeyIsInArray($dataItemName, $value);

    }
    return false;
}

这是我的阵列结构:

Array (
    [0] => Array ( [reset_time] => 2013-12-11 22:24:25 )
    [1] => Array ( [email] => someone@example.com )
)

该方法遍历第一个数组分支,但不遍历第二个数组分支。有人可以解释为什么会出现这种情况吗?我似乎错过了一些东西。

1 个答案:

答案 0 :(得分:4)

问题在于无论递归调用是否成功,都会返回递归调用返回的内容。只有在递归期间找到密钥时才应该返回,否则你应该继续循环。

private function checkKeyIsInArray($dataItemName, $array)
{
    foreach ($array as $key => $value)
        {
            // convert $key to string to prevent key type convertion
            echo '<pre>The key: '.(string) $key.'</pre>';

            if ((string)$key == $dataItemName)
                return true;

            if (is_array($value) && $this->checkKeyIsInArray($dataItemName, $value))
                return true;

        }
    return false;
}
BTW,为什么这是一个非静态函数?它似乎不需要任何实例属性。