【问题标题】:Looking for a slicker way of rebuilding this array寻找一种更巧妙的方式来重建这个数组
【发布时间】:2010-03-02 08:49:32
【问题描述】:

我的数据库返回了一个包含多行的数据结果。我遇到的问题是我只需要单行来处理某些项目,而需要多行来处理其他项目,并且不需要对每个需要的项目进行多个数据库查询,我想我会重建数据数组。

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

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

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] 包含我的结果中的所有数据。数组 key[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
              )
        )
)

【问题讨论】:

    标签: php


    【解决方案1】:

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

    在 MySQL 文档中查找 GROUP_CONCAT here

    【讨论】:

    • 嗯.. 这似乎是一个可行的解决方案,并且可能是处理它的最佳方式。如果我使用 group_concat,我不会丢失只需要一行的行,对吗?我在想这个函数由于某种原因只返回一行。当然,我会看看文档。
    【解决方案2】:

    如果我了解您的需求,这就是方法

    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 中的“多行”转换为一个带逗号的字符串。

    【讨论】:

    • 谢谢迈克尔。我相信这就是我正在寻找的。​​span>
    • 迈克尔,我如何限制前 5 列中的每一列只有一行?请记住,我将取回最后两列的最大数量,这意味着前 5 行将是重复的。
    • 迈克尔,对不起。这不起作用,因为 $value['product'] 不是数组。如果这对你有帮助,我确实修改了我的问题。
    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多