检查数组php中是否有某个键

时间:2011-12-31 11:39:51

标签: php arrays multidimensional-array key

我希望能够检查我的数组中是否存在某个键。我有一个数组,我正在从mysql合并多个数组。最好的方法是什么?

例如

Array
(
[0] => Array
(
 [id] => 3
 [comments] => comment text
)
[1] => Array
(
 [id] => 3
 [comments] => comment text
)
[2] => Array
(
 [idMenu] => 1
 [names] => text
)
[3] => Array
(
 [idMenu] => 3
 [names] => names text
)
)

所以我试图看看这个数组是否有注释和/或名称。

我必须做一个if语句吗?

由于

2 个答案:

答案 0 :(得分:4)

假设您的父数组将始终返回一堆子数组...

foreach ($parentArray as $childArray) {
    if (array_key_exists("comments", $childArray) { return true; }
    if (array_key_exists("names", $childArray) { return true; }
}

现在,这只是检查父节点是否有一个带有其中一个键的子数组。实际上检查值是否为空将需要更多的代码,但这应该让你走右边方向。

答案 1 :(得分:3)

我从the manual中提取了此功能。它是array_key_exists()的递归版本。由于它是递归的,所以键埋在数组中的深度并不重要。此函数不会告诉您哪里可以找到密钥 - 只有它存在。

function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}

使用你的阵列:

<?php
function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}

$arr = array
(
    array
    (
        'id' => 3,
        'comments' => 'comment text'
    ),
    array
    (
        'id' => 3,
        'comments' => 'comment text'
    ),
    array
    (
        'idMenu' => 1,
        'names' => 'text'
    ),
    array
    (
        'idMenu' => 3,
        'names' => 'names text'
    )
);

var_dump(array_key_exists_r('comments', $arr));
var_dump(array_key_exists_r('names', $arr));
var_dump(array_key_exists_r('bob', $arr));
?>

输出:

bool(true)
bool(true)
bool(false)