有没有一种合适的方法来更好地构造数组以进行循环

时间:2010-09-06 18:21:00

标签: php mysql

好的,我有这个 page正如您所看到的,我正在记录12种产品的数组。如果向下滚动,您可以看到我需要按类别名称对它们进行分组的要求,但我不确定构建循环的最佳方法。

my query

$query = "SELECT p.name, p.price, pc.quantity, p.image, p.descr, t.name as Category_name
          FROM products as p
          join categorizations as pc on p.id = pc.product_id
          join categories as c on c.id = pc.category_id
          JOIN types AS t on t.id = p.type_id
          WHERE  c.code      = '{$type}_{$count}'
          order by p.order desc";

$allproducts = array();
while($row_r = mysql_fetch_assoc($result)){
  $allproducts[] = $row_r;
}

也许我需要更改我的查询或按类别名称分组,但这可能会丢弃一些产品。也许我可以创建一个多维数组并循环每个类别名称

任何建议

2 个答案:

答案 0 :(得分:3)

如果您更改阵列线,

while($row_r = mysql_fetch_assoc($result)){
  $allproducts[] = $row_r;
}

while($row_r = mysql_fetch_assoc($result)){
  $allproducts[$row_r['Category_name']][$row_r['name']] = $row_r;
}

您将自动按类别对项目进行分组,具体取决于您之后如何使用这些信息。

如果您希望整理阵列,减少阵列的内存占用,可以将这些行添加到循环中:

  unset($allproducts[$row_r['Category_name']][$row_r['name']]['Category_name']);
  unset($allproducts[$row_r['Category_name']][$row_r['name']]['name']);

如果这看起来很复杂或令人困惑,我通常会使用OBJECT。

while($row_r = mysql_fetch_object($result)){
  $allproducts[$row_r->Category_name][$row_r->name] = $row_r;
  unset($allproducts[$row_r->Category_name][$row_r->name]['Category_name']);
  unset($allproducts[$row_r->Category_name][$row_r->name]['name']);
}

答案 1 :(得分:0)

你拉的那些中有一个独特的专栏吗?如果是这样,您可以对GROUP_name和它进行GROUP BY,它会将类别组合在一起但避免丢失任何行。然后,您可以按类别组织数据,这将更容易循环,数据库为您完成了大部分组织工作。

如果您没有唯一的列,那么添加主键列不会有太大影响。在这种情况下,您的GROUP BY可能看起来像:

GROUP BY Category_name, p.id