我有一个允许根据语法" key.key2.key3"检索数组的类。
现在,没问题。当其中一个键是对象时会出现问题。 因为我必须检查密钥是数组还是对象
当我尝试确定键的类型[key2] ==数组或键的类型 - > key2 == object时,我的脚本错误。这两个条件中的一个可能是错误的。 (如果脚本测试键[key2] == array,并且key2是一个对象,例如)。
有没有办法验证key2是一个数组还是一个对象而没有做[key2]或key-> key2?
感谢。
答案 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