Как ссылаться на эту переменную (вложенные объекты / массивы)? - PullRequest
1 голос
/ 09 марта 2011

Я изучаю 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 ]

4 голосов
/ 09 марта 2011

Вы предложили следующую ссылку на массив, чтобы получить нужную переменную:

 $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
4 голосов
/ 09 марта 2011

Это беспорядок переменной.Проблема, с которой вы столкнулись, заключается в том, что вы используете обозначения в скобках, например, «['view']», для каждого «шага» в навигации по вашей переменной.Это было бы хорошо, если бы каждый дочерний элемент переменной был массивом, но не каждый.

Например, вы заметите, что $ contexts ['context_view_1'] на самом деле является объектом , а не массивом (обратите внимание, что он говорит "[context_view_1] => ctools_context Object«).В то время как вы использовали бы эту заключенную в скобки нотацию для адресации элементов массива , вы используете оператор стрелки для адресации свойств объекта .

Таким образом, вы бы обратились к полю, которое вы пытаетесь достичь, следующим выражением:

$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value
1 голос
/ 09 марта 2011

Для свойств, перечисленных как «Объект», вам нужно использовать ->, чтобы войти в него, и «Массив», вам нужно использовать [].Итак:

$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value
0 голосов
/ 09 марта 2011

Не путайте объекты с массивами.Член массива может быть принят $array['member'], но к полям объекта можно получить доступ как $object->fieldname.

0 голосов
/ 09 марта 2011
echo $context['context_view_1']->view->result[0]->node_data_field_display_field_display_value;
0 голосов
/ 09 марта 2011
$contexts['context_view_1']->view->result[0]->node_data_field_display_field_display_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...