2013-06-29 113 views
0

我正試圖學習動態菜單是如何工作的。我找到了一個教程,我可以根據下面的數組構建一個動態菜單。PHP動態菜單

$menu_items = array(
    (object) array('id'=>'1', 'name'=>'Home', 'parent_menu_id'=>'0'), 
    (object) array('id'=>'2', 'name'=>'Products', 'parent_menu_id'=>'0'), 
    (object) array('id'=>'3', 'name'=>'About', 'parent_menu_id'=>'0'), 
    (object) array('id'=>'4', 'name'=>'Contact', 'parent_menu_id'=>'0'), 
    (object) array('id'=>'5', 'name'=>'Apparel', 'parent_menu_id'=>'2'), 
    (object) array('id'=>'6', 'name'=>'Shirts', 'parent_menu_id'=>'2'), 
    (object) array('id'=>'7', 'name'=>'Pants', 'parent_menu_id'=>'2'), 
    (object) array('id'=>'8', 'name'=>'Hats', 'parent_menu_id'=>'5'), 
    (object) array('id'=>'9', 'name'=>'Gloves', 'parent_menu_id'=>'5'), 
    (object) array('id'=>'10', 'name'=>'Ballcaps', 'parent_menu_id'=>'8'), 
    (object) array('id'=>'11', 'name'=>'Beanies', 'parent_menu_id'=>'8'), 
    (object) array('id'=>'12', 'name'=>'Wool', 'parent_menu_id'=>'11'), 
    (object) array('id'=>'13', 'name'=>'Polyester', 'parent_menu_id'=>'11'), 
    (object) array('id'=>'14', 'name'=>'Jimsider.com', 'parent_menu_id'=>'4'), 
); 

現在爲我的問題。我希望能夠從MySQL中填充這個數組。我試圖用fetchall來實現這一點,這確實使我成爲一個數組,但是數組與上面的PHP數組差別太大。 (使用var_dump進行檢查)

我製作了一個MySQL列表,其列爲:id, name, parent_menu_id。我插入了上面的信息。

我該如何獲得與上面的PHP數組相同數組類型的數據庫信息?

陣列看起來與PHP的方式:

array(14) { [0]=> object(stdClass)#15 (3) { ["id"]=> string(1) "1" ["name"]=> string(4) "Home" ["parent_menu_id"]=> string(1) "0" } [1]=> object(stdClass)#14 (3) { ["id"]=> string(1) "2" ["name"]=> string(8) "Products" ["parent_menu_id"]=> string(1) "0" } [2]=> object(stdClass)#13 (3) { ["id"]=> string(1) "3" ["name"]=> string(5) "About" ["parent_menu_id"]=> string(1) "0" } [3]=> object(stdClass)#12 (3) { ["id"]=> string(1) "4" ["name"]=> string(7) "Contact" ["parent_menu_id"]=> string(1) "0" } [4]=> object(stdClass)#11 (3) { ["id"]=> string(1) "5" ["name"]=> string(7) "Apparel" ["parent_menu_id"]=> string(1) "2" } [5]=> object(stdClass)#10 (3) { ["id"]=> string(1) "6" ["name"]=> string(6) "Shirts" ["parent_menu_id"]=> string(1) "2" } [6]=> object(stdClass)#9 (3) { ["id"]=> string(1) "7" ["name"]=> string(5) "Pants" ["parent_menu_id"]=> string(1) "2" } [7]=> object(stdClass)#8 (3) { ["id"]=> string(1) "8" ["name"]=> string(4) "Hats" ["parent_menu_id"]=> string(1) "5" } [8]=> object(stdClass)#7 (3) { ["id"]=> string(1) "9" ["name"]=> string(6) "Gloves" ["parent_menu_id"]=> string(1) "5" } [9]=> object(stdClass)#6 (3) { ["id"]=> string(2) "10" ["name"]=> string(8) "Ballcaps" ["parent_menu_id"]=> string(1) "8" } [10]=> object(stdClass)#5 (3) { ["id"]=> string(2) "11" ["name"]=> string(7) "Beanies" ["parent_menu_id"]=> string(1) "8" } [11]=> object(stdClass)#4 (3) { ["id"]=> string(2) "12" ["name"]=> string(4) "Wool" ["parent_menu_id"]=> string(2) "11" } [12]=> object(stdClass)#3 (3) { ["id"]=> string(2) "13" ["name"]=> string(9) "Polyester" ["parent_menu_id"]=> string(2) "11" } [13]=> object(stdClass)#2 (3) { ["id"]=> string(2) "14" ["name"]=> string(12) "Jimsider.com" 

我試圖做一個foreach和填充然後將它。但只有在我的數據庫中的最後一項是在數組中。

try { 
$conn = new PDO($dblink, $db_username, $db_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$data = $conn->query('SELECT * FROM menu 
'); 

    foreach($data as $row) { 

      $menu_items = array(
      (object) array('id'=>''.sprintf($row[id]).'', 'name'=>''.sprintf($row[name]).'', 'parent_menu_id'=>''.sprintf($row[parent_menu_id]).''), 

} 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 
}       

數組看起來與在foreach嘗試的方式:

array(1) { [0]=> object(stdClass)#5 (3) { ["id"]=> string(1) "3" ["name"]=> string(8) "Over ons" ["parent_menu_id"]=> string(1) "0" } } 

編輯:使用支架時填充數組:在foreach似乎停留在循環?

try { 
$conn = new PDO($dblink, $db_username, $db_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$data = $conn->query('SELECT id,name,parent_menu_id FROM menu 
'); 

    foreach($data as $row) { 

     $menu_items[] = array(
     (object) array('id'=>''.$row[id].'', 'name'=>''.$row[name].'',  'parent_menu_id'=>''.$row[parent_menu_id].''), 



); 
     } 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 
}   
+1

有第一陣列和第二個) –

+0

沒有區別我知道,cuase其相同的數組;),重點是,我將如何去獲取數據從mysql到相同的排序結構 –

+0

A nd一個常見的問題 - 你有什麼嘗試? –

回答

0

好了,每一行這裏被分配到$menu_items

foreach($data as $row) { 
     $menu_items = array(
     (object) array('id'=>''.sprintf($row[id]).'', 'name'=>''.sprintf($row[name]).'', 'parent_menu_id'=>''.sprintf($row[parent_menu_id]).''), 

} 

它應該被添加到$menu_items

foreach($data as $row) { 
    $menu_items[] = (object) array(
     'id'=>''.sprintf($row[id]).'', 
     'name'=>''.sprintf($row[name]).'', 
     'parent_menu_id'=>''.sprintf($row[parent_menu_id]).'' 
    ); 
} 
+0

我試過這個,但它需要年齡才能獲取數據? –

+0

爲什麼需要年齡? –

+0

try { $ conn = new PDO($ dblink,$ db_username,$ db_password); $ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); $ data = $ conn-> query('SELECT * FROM menu '); foreach($ data as $ row){ $ menu_items [] = array( (object)array('id'=>''。sprintf($ row [id])。'','name'= >''。sprintf($ row [name])。'','parent_menu_id'=>''。sprintf($ row [parent_menu_id])。'') ); } } catch(PDOException $ e){ echo'ERROR:'。 $ E->的getMessage(); } –