寻找一种重建这个阵列的方式

时间:2010-03-02 08:49:32

标签: php

我的数据库中有多行返回数据结果。我遇到的问题是,对于某些项目我只需要一行,而对于其他项目我需要多行,而不需要为每个需要的项目执行多个数据库查询,我以为我会重建数据数组。

我最终的目的是将数组中的每个项目用作字符串。如果最后两个项目,产品和位置有多行,那么我需要将它们作为字符串返回。

处理此问题的最佳方法是什么?

Array
(
    [0] => Array
        (
            [cid] => one line
            [model] => one line
            [mfgr] => one line
            [color] => one line
            [orderid] => one line
            [product] => many lines
            [location] => many lines
        )
    [1] => Array
        (
            .. repeats for as many rows as were found
        )
)

让我重新解释一下这个问题。您在上面看到的数组是从我的foreach生成的数组。数组键[0]保存结果中的所有数据。数组键[1]只是重复数据。列1-5需要单行。第6栏和第6栏7是我需要多行的地方,因此是重复的数组键。

如果我必须按照我需要的方式重建这个数组,它看起来像这样:

Array
(
    [single] => Array
        (
            [cid] => one line
            [model] => one line
            [mfgr] => one line
            [color] => one line
            [orderid] => one line

            [product] => Array
              (
                    [0] => many lines
                    [1] => many lines
              )
            [location] => Array
              (
                    [0] => many lines
                    [1] => many lines
              )
        )
)

2 个答案:

答案 0 :(得分:1)

您想要做的分组是数据库最擅长的事情。

查找GROUP_CONCAT here的MySQL文档。

答案 1 :(得分:1)

如果我理解你需要什么,这就是

foreach($array as $key => $value) {
  if(is_array($value['product'])) {
    $array[$key]['product'] = implode(', ', $value['product']);
  }

  if(is_array($value['location'])) {
    $array[$key]['location'] = implode(', ', $value['location']);
  }
}

这会将productlocation中的“多行”变为带逗号的单个字符串。