2013-04-07 100 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]它自己的阵列,在追加每次循环迭代的新值。这将解决覆盖问题。但是,我不确定这是你想要做的。