2016-10-03 50 views
1

PHP通配符我有时会遇到和对象是这样的:为对象键

stdClass Object 
(
[batchcomplete] => 
[query] => stdClass Object 
    (
     [pages] => stdClass Object 
      (
       [48548] => stdClass Object 
        (
         [pageid] => 48548 
         [ns] => 0 
         [title] => Dopamine 

该对象键48548每一次的会是不同的,所以我不知道它的价值是什么样的方式。可以说,我需要在这个对象拿到冠军(多巴胺),我需要做这样的事情:

$title = $object->query->page->{*WILDCARD*}->title; 

但我还没有想出一个办法做到这一点呢。有没有办法像这样跳过一个对象键,而不必找出键的值?

回答

2

数字对象属性不起作用。假设只有一个,转换成数组,并拿到钥匙:

$array = (array)$object->query->pages; 
$title = $array[key($array)]->title; 

或者只是得到一个元素:

$title = current((array)$object->query->pages)->title; 

如果这是从JSON来您可能需要将其作为一个解码阵列在第一位。如果没有,那么也许这:

$array = json_decode(json_encode($oject), true); 

对于非数字属性这应该工作:

$var = key(get_object_vars($object->query->pages)); 
$title = $object->query->pages->$var->title; 
+0

谢谢,我只是你的方法去。我之前使用过CakePHP,我记得它有处理数组的各种函数,其中一个是递归数组搜索工具。我想知道是否包含这样的各种实用程序的轻量级框架。 –