如何引用此变量(嵌套对象/数组)?

时间:2011-03-09 17:02:13

标签: php drupal

我正在学习PHP和Drupal。我需要引用一个名为$ contexts的数组中包含的变量。

所以print_r($contexts)给了我这个:

Array ( 
   [context_view_1] => ctools_context Object ( 
       [type] => view 
       [view] => view Object ( 
          [db_table] => views_view 
          [result] => Array ( 
              [0] => stdClass Object ( 
                   [nid] => 28 
                   [node_data_field_display_field_display_value] => slideshow
              ) 
           )
eek令人困惑。我想使用node_data_field_display_field_display_value变量。我认为我的代码需要像这样,但我知道这不对:

if ($contexts['context_view_1']['view']['result'][0]
['node_data_field_display_field_display_value'] == 'slideshow') then do whatever...

谢谢!

6 个答案:

答案 0 :(得分:4)

这是一个混乱的变量。您遇到的问题是您使用的是括号中的符号,例如: “['view']”,用于导航变量中的每个“步骤”。如果变量的每个子节点都是一个数组,那就没问题了,但不是每一个都是。

你会注意到,例如,$ contexts ['context_view_1']实际上是一个对象,而不是一个数组(注意它说“[context_view_1] => ctools_context对象” )。虽然您将使用括号中的符号来处理数组元素,但您可以使用箭头操作符来解决属性对象

因此,您可以使用以下表达式来解决您尝试访问的字段:

$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value

答案 1 :(得分:4)

您建议使用以下数组引用来获取所需的变量:

 $contexts['context_view_1']['view']['result'][0]['node_data_field_display_field_display_value']

这不起作用的原因是因为链中的某些结构实际上是对象而不是数组,所以你需要一个不同的语法来获取它们的属性。

所以第一层是正确的,因为$contexts是一个数组,所以context_view_1是一个数组元素,因此你可以像$contexts['context_view_1']那样使用它。

但是下一个级别是一个对象,所以要到达view,您需要使用->语法将其作为对象属性引用,如下所示:$contexts['context_view_1']->view

对于树中的每个级别,您需要确定它是对象还是数组元素,并使用正确的语法。

在这种情况下,你最终会看到这样的东西:

$context['context_view_1']->view->result[0]->node_data_field_display_field_display_value

答案 2 :(得分:1)

对于列为“对象”的属性,您需要使用->进入它,而“数组”需要使用[]。所以:

$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value

答案 3 :(得分:0)

$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value

答案 4 :(得分:0)

echo $context['context_view_1']->view->result[0]->node_data_field_display_field_display_value;

答案 5 :(得分:0)

不要将对象误认为是数组。可以通过$array['member']访问数组的成员,但可以将对象的字段作为$object->fieldname进行访问。