数组正在将以前的值重新分配到未设置的位置,PHP

数组正在将以前的值重新分配到未设置的位置,PHP,php,arrays,Php,Arrays,我试图在运行时创建一个多维数组,用于查询和存储多个MySQL结果。例如,假设我们有一个这样的表(是虚构的,所以请不要在示例中选择): 我们需要创建一个多维数组来存储每个商店的所有产品。我希望的结果是: $storeArray = array[[[101],[blue],[s]],[[102,103],[red,yellow],[s,m]],[[104],[blue],[m]]]; 以下是我的代码: $counter = 0; foreach($storeIDs as $item){ $r

我试图在运行时创建一个多维数组,用于查询和存储多个MySQL结果。例如,假设我们有一个这样的表(是虚构的,所以请不要在示例中选择):

我们需要创建一个多维数组来存储每个商店的所有产品。我希望的结果是:

$storeArray = array[[[101],[blue],[s]],[[102,103],[red,yellow],[s,m]],[[104],[blue],[m]]];
以下是我的代码:

$counter = 0;
foreach($storeIDs as $item){
   $result = mysql_query('select whatever');
   $rows = mysql_num_rows($result);
   for($i=0;$i<$rows;$i++){
      $tag[$i]       = mysql_result(); 
      $color[$i]     = mysql_result(); 
      $size[$i] = mysql_result(); 
  }
$tempArray = array($tag,$,$color,$size);
$storeArray[$counter] = $tempArray;
unset($tempArray);
$counter++;
}
$counter=0;
foreach($storeid作为$item){
$result=mysql_query('select whatever');
$rows=mysql\u num\u rows($result);

对于($i=0;$i您正在取消设置$tmpArray,但看起来您可能还需要取消设置$tag、$color和$size。对于稍微不同的数据结构,有更好的方法,但实际上,您尝试过这种方法吗

unset($tempArray,$tag,$color,$size);

实际上,您可以在一个包含两个项目的循环中设置$tag[0]和$tag[1]。然后,对于一个包含一个项目的循环,您可以更新$tag[0],但$tag[1]仍保持设置状态。

为什么不可以?您的内部
for()
循环遍历整个查询结果集,并一次性将数据填充到$tag/color/size中,然后在获取数据后,构建$tempArray。这里有一些代码味道。您正在迭代
$storeArray
并在循环中修改它。您是否考虑过使用关联数组来存储您的信息信息更清晰?对,$tempArray捕捉到()的整个内部进入一个二维数组,然后需要将其打包到整个$storeArray中。当查询结果在以后的迭代中返回的行数较少时,就会出现问题。$tempArray应该在SQL结果较少时在其中包含小数组,但它实际上保持了最高计数,并使用以前的SQL查询填充位置与这种奇怪的数据结构结合?您的输出基本上将产品分解为标签、颜色和大小的并行数组,而不是将每个产品作为子数组单元(其父数组是存储的数组)的更普通的方法。这使得您不得不依赖数组索引来匹配产品的属性,在这在PHP中是非常不寻常的(在PHP中,关联数组最常用于简单的
foreach
循环)好消息,很高兴能提供帮助!
unset($tempArray,$tag,$color,$size);