检查数组的子节点是对象还是数组

时间:2017-05-09 15:02:58

标签: php arrays

我有一个允许根据语法" key.key2.key3"检索数组的类。

现在,没问题。当其中一个键是对象时会出现问题。 因为我必须检查密钥是数组还是对象

当我尝试确定键的类型[key2] ==数组或键的类型 - > key2 == object时,我的脚本错误。这两个条件中的一个可能是错误的。 (如果脚本测试键[key2] == array,并且key2是一个对象,例如)。

有没有办法验证key2是一个数组还是一个对象而没有做[key2]或key-> key2?

感谢。

2 个答案:

答案 0 :(得分:0)

is_array()怎么样?

文档here

答案 1 :(得分:0)

您需要在访问密钥之前对父级执行测试。

以下是一个例子:

function findValue($a, $s) {
    $keys = explode(".", $s);
    foreach ($keys as $key) {
        if (is_object($a)) {
            $a = $a->$key;
        } else if (is_array($a)) {
            $a = $a[$key];
        } else { // unexpected
            return null;
        }
    }
    return $a;
}

// Sample data: mix of object and array:
$arr = [
    "key1" => (object) [
        "key2" => [
            "key3" => 42
        ]
    ]
];

echo findValue($arr, "key1.key2.key3"); // 42