2017-05-09 68 views
-2

我有一个允许根据语法“key.key2.key3”检索数组的类。检查数组的子对象是数组还是数组

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

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

有没有一种方法来验证key2是一个数组或对象而不用做key [key2]或key-> key2?

谢谢。

+2

份额代码 –

+2

['is_array()'](http://php.net/manual/en/function.is-array.php)['is_object ()'](http://php.net/manual/en/function.is-object.php) –

+0

我已经使用is_array()和is_object(),但不像trincot的例子。 trincot的例子工作,我没有这样使用这两个函数。 –

回答

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 
0

is_array()怎么样?

文档here

相关问题