我正在学习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...
谢谢!
答案 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
进行访问。