Php 正在寻找一种更巧妙的方法来重建此阵列

Php 正在寻找一种更巧妙的方法来重建此阵列,php,Php,我的数据库返回了一个包含多行的数据结果。我遇到的问题是,我只需要对某些项使用一行,对其他项使用多行,而不需要对所需的每个项执行多个数据库查询,我认为我应该重建数据数组 我最终追求的是将数组中的每个项作为字符串使用。如果最后两个项目product和location有多行,那么我需要将它们作为字符串返回 处理这个问题的最佳方法是什么 Array ( [0] => Array ( [cid] => one line [

我的数据库返回了一个包含多行的数据结果。我遇到的问题是,我只需要对某些项使用一行,对其他项使用多行,而不需要对所需的每个项执行多个数据库查询,我认为我应该重建数据数组

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

处理这个问题的最佳方法是什么

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列和第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
              )
        )
)

您想要进行的分组是数据库最擅长的


在MySQL文档中查找
GROUP\u CONCAT

如果我理解了您的需要,下面是方法

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']);
  }
}

这将把
产品
位置
中的“多行”变成一个带逗号的字符串。

Hmm。。这似乎是一个可行的解决方案,可能是最好的处理方法。如果我使用group_concat,我不会丢失只需要一行的行,对吗?由于某种原因,我认为这个函数只返回一行。当然,我会看一下医生的。谢谢你,迈克尔。我相信这就是我要找的。Michael,我如何限制前5列中的每一列只有一行?记住,我将返回最后两列的最大数量,这意味着前5行将是重复的。Michael,对不起。这不起作用,因为$value['product']不是数组。如果这对你有帮助的话,我确实修改了我的问题。