2011-03-09 55 views
1

我在學習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 
      ) 
      ) 

伊克混淆。我想使用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

嘗試了這一點:'$環境[ 'context_view_1'] - >查看 - >結果[0] - > node_data_field_display_field_display_value ' – JohnP 2011-03-09 17:08:10

回答

4

您提出以下數組引用來獲得你想要的變量:

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

這不工作的原因是因爲一些在鏈中的結構實際上是對象而不是數組,所以你需要使用不同的語法來獲取它們的屬性。

所以第一層是正確的,因爲$contexts是一個數組,所以​​是一個數組元素,所以你可以像$contexts['context_view_1']一樣去找它。

但一個新的水平是一個對象,所以去view,你需要->語法來引用它作爲一個對象的屬性,就像這樣:$contexts['context_view_1']->view

每個級別下的樹,你需要確定無論是對象還是數組元素,並使用正確的語法。

在這種情況下,你會的東西,看起來像這樣結束:

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

對於列爲「對象」的屬性,你需要使用->進入它和「陣列」,你需要使用[]。所以:

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

這是一個變量的混亂。您遇到的問題是您使用括號內的符號,例如「['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 
+0

+1對於「這是一個變量的混亂」,但Drupal確實有這樣的混亂結構的習慣。 : - / – Spudley 2011-03-09 17:43:05

0

不要用數組錯對象。一個數組的記憶可以被$array['member']加入,但是一個對象的字段可以被作爲$object->fieldname訪問。

相關問題