2013-04-07 62 views
0

我知道的init PHP數組的方法是ASIGN值數組中的for循環

$a=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六"); 

,但我必須在兩個維數組分配,這樣的數據是

[0]=> array(6) { ["id"]=> string(1) "2" ["menu_name"]=> string(12) "小吃菜單" ["button_pic_save_path"]=> string(40) "/images/left_button/menu/normal_menu.gif" ["cover_button_pic_save_path"]=> string(46) "/images/left_button/menu/normal_menu_cover.gif" ["order_number"]=> string(1) "0" ["modify_time"]=> string(19) "2013-04-07 09:37:43" } } 
[1]=> array(6) { ["id"]=> string(1) "3" ["menu_name"]=> string(12) "小吃菜單" ["button_pic_save_path"]=> string(40) "/images/left_button/menu/normal_menu.gif" ["cover_button_pic_save_path"]=> string(46) "/images/left_button/menu/normal_menu_cover.gif" ["order_number"]=> string(1) "0" ["modify_time"]=> string(19) "2013-04-07 09:37:43" } } 

現在我實現的代碼如下。

$query_menu_data = select_sql(QUERY_MENU_SQL_STR); 

if(count($query_menu_data) >= 1) 
{ 
    $ary_menu[count($query_menu_data)]; 

    for($loop_i = 0; $loop_i < count($query_menu_data); $loop_i++) 
    { 
     for($loop_j = 0; $loop_j < count($ARY_MENU_FIELD); $loop_j++) 
     { 
      // hash key 
      /* 
      $ary_menu[$loop_i] = array( 
       $ARY_MENU_FIELD[$loop_j] => $query_menu_data[$loop_i][$loop_j] 
      ); 
      */ 
      $ary_menu[$loop_i] = array( 
       $ARY_MENU_FIELD[$loop_j] => $query_menu_data[$loop_i][$loop_j] 
      ); 
     } // end loop j 
    } // end loop i 
} 

數組的結果總是保存最後的數據,我能用什麼方法解決它。

感謝各位,解決方法在評論中。

+0

你能否澄清你想讓你的數組看起來像什麼以及你實際得到了什麼?還包括非英文字母(英文)可能會讓一些人失去... – Floris 2013-04-07 03:25:16

+1

@弗洛里斯這些中文詞意味着週日到週六。 – Antony 2013-04-07 03:26:16

+0

@antony - 謝謝你讓我知道。我仍然認爲這可能會讓很多人沒有完成這個問題的閱讀,那是我評論的(不太重要的,次要的)觀點。 – Floris 2013-04-07 03:34:40

回答

0

您需要初始化菜單項。在完成之後,您需要填寫此菜單的每個菜單字段。

代碼:

for($loop_i = 0; $loop_i < count($query_menu_data); $loop_i++) 
{ 
    $ary_menu[$loop_i] = array(); 
    for($loop_j = 0; $loop_j < count($ARY_MENU_FIELD); $loop_j++) 
    { 
     // hash key 
     /* 
     $ary_menu[$loop_i] = array( 
      $ARY_MENU_FIELD[$loop_j] => $query_menu_data[$loop_i][$loop_j] 
     ); 
     */ 
     $ary_menu[$loop_i][$ARY_MENU_FIELD[$loop_j]] = $query_menu_data[$loop_i][$loop_j]; 
    } // end loop j 
} // end loop i 

我無法驗證,如果$query_menu_data具有正確的數據結構,但是從你的問題的描述,應該是沒有問題的出現。

+0

感謝每個身體,特定烤餅, 代碼 $ ary_menu [$ loop_i] [$ ARY_MENU_FIELD [$ loop_j]] = $ query_menu_data [$ loop_i] [$ loop_j]; 將適用於我的目標。 – user1753112 2013-04-07 03:52:19

0

它看起來像你的內循環(loop_j)可能永遠不會執行,因爲你沒有$ ARY_MENU_FIELD定義之前,你第一次執行它(並在該循環內創建/修改)。是否有其他代碼沒有顯示?

0

當您在遍歷/循環後遇到數組中只包含「最後一位」數據的問題時,應該假定您在某處發生覆蓋錯誤。在你的循環

來看,分配來在第二循環中,與...

$ary_menu[$loop_i] = array(...

=等於上面簽名應該是你尋找線索。每次運行內部$loop_j for循環時,您都會重複指定$loop_i索引。這是重新分配的地方。

由於我不確切地知道你在最終數組中尋找什麼,我只能對解決方案做出假設。這可能是做這樣的事情......

$ary_menu[$loop_i][] = array(....)

這將完成基本上是讓$ary_menu[$loop_i]它自己的陣列,在追加每次循環迭代的新值。這將解決覆蓋問題。但是,我不確定這是你想要做的。