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