2013-02-07 38 views
-2

我通常寫oop代碼,這很可能是爲什麼我從來沒有見過這種編碼方式。我不明白下期多維數組中的語法,爲什麼[$obj->id]['label']不只是$obj['id']['label']]我正在做一個嘖嘖,但我不明白這個語法

$sql = "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC"; 
$items = mysql_query($sql); 
while ($obj = mysql_fetch_object($items)) { 
    if ($obj->parent_id == 0) { 
     $parent_menu[$obj->id]['label'] = $obj->label; 
     $parent_menu[$obj->id]['link'] = $obj->link_url; 
    } else { 
     $sub_menu[$obj->id]['parent'] = $obj->parent_id; 
     $sub_menu[$obj->id]['label'] = $obj->label; 
     $sub_menu[$obj->id]['link'] = $obj->link_url; 
     if (!isset($parent_menu[$obj->parent_id]['count'])) { 
      $parent_menu[$obj->parent_id]['count'] = 0; 
     } 
     $parent_menu[$obj->parent_id]['count']++; 
    } 
} 
mysql_free_result($items); 
+0

它是一種動態訪問任何數組密鑰的方式。 '$ obj-> id'的值用於訪問數組鍵。 – datasage

+1

我以爲你瞭解面向對象? $ obj是一個對象。 – crush

+2

(關於mysql_ *的強制性註釋) - [**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再維護和[已正式棄用](http://j.mp/XqV7Lp)。看到紅色框?請參閱[準備的語句](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli) - [這篇文章](http://j.mp/QEx8IB) – Amelia

回答

0

[$obj->id]['label']$obj['id']['label']甚至沒有接近相同的東西。

$parent_menu[$obj->id]['label']$obj->id鍵的值中獲取'label'鍵的值,該鍵值爲$parent_menu$obj['id']['label']$obj數組(其不是數組)中的'id'鍵的值中獲取'label'鍵的值。

數組鍵和屬性在PHP中不可互換,就像它們在JavaScript中一樣。

0

有不同的值:

$obj->id具有值,其引用的值。如果你只寫「身份證」你引用的鍵「id」(字符串)

想象一下,你有設置好的爲341

屬性id的OBJ,這陣:

$sub_menu = array(
    2 => array(
     'name' => 'Blog', 
     'label' => 'My Blog' 
    ), 
    341 => array(
     'name' => 'Downloads', 
     'label' => 'Downloads' 
    ), 
    'id' => array(
     'name' => 'Tutorials', 
     'label' => 'Tutorials Awesome!' 
    ) 
); 

所以,當你調用數組:

$sub_menu[$obj->id]['label']那麼你實際上是在呼籲: $sub_menu[341]['label'] 這是等於「下載」;

如果您致電 $sub_menu['id']['label']那麼您正在用'id'鍵調用子菜單。 這等於'教程真棒!'

0

簡而言之:

$parent_menu[$obj->id]['label'] = $obj->label; 

相當於:

$myID = $obj->id; 
$parent_menu[$myID]['label'] = $obj->label; 

操作是$obj的類屬性id的值被檢索並用作$parent_menu陣列中的索引。