【问题标题】:How to group the objects based on the common key value pair in PHP? [duplicate]如何根据 PHP 中的公共键值对对对象进行分组? [复制]
【发布时间】:2020-04-27 10:10:14
【问题描述】:

我有一个包含如下对象的数组:

array:113 [
  0 => App\Api\Wheel {#5809
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: 16
  }
  1 => App\Api\Wheel {#6201
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: 17
  }

这里,根据值,我需要分组。直径会有所不同,而其他的会相同。

我的最终结果是结构相同,但直径为数组或逗号分隔的字符串。

array:113 [
    0 => App\Api\Wheel {#5809
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: [
            16,
            17      
        ]
    }

到目前为止,我已经尝试了以下代码行,

$finalResult = array();
        foreach ($records as $record) {
            if (!in_array($record->getManufacturer(), array_keys($finalResult))) {
                $finalResult[$record->getManufacturer()] = (object)array(
                    'manufacturer' => $record->getManufacturer(),
                    'colour' => $record->getColour(),
                    'design' => $record->getDesign(),
                    'surface' => $record->getSurface(),
                    'diameter' => $record->getDiameter()
                );
            } else {
                $finalResult[$record->getManufacturer()]->diameter = [$record->getDiameter()];
            }
        }
        dd(($finalResult));

但是,我无法按相同格式分组或返回结果。

任何人都可以帮助我吗?

【问题讨论】:

    标签: php arrays object grouping


    【解决方案1】:

    您需要更新else 块中的代码以处理添加另一个diameter 值,目前您只是覆盖现有值。要创建一个数组,如下所示:

    if (is_array($finalResult[$record->getManufacturer()]->diameter)) {
        $finalResult[$record->getManufacturer()]->diameter[] = $record->getDiameter();
    }
    else {
        $finalResult[$record->getManufacturer()]->diameter = array($finalResult[$record->getManufacturer()]->diameter, 
                                                                   $record->getDiameter());
    }
    

    制作一个逗号分隔的列表更容易一些:

    $finalResult[$record->getManufacturer()]->diameter .= ',' . $record->getDiameter();
    

    注意

    !in_array($record->getManufacturer(), array_keys($finalResult))
    

    可以替换为

    !isset($finalResult[$record->getManufacturer()])
    

    这样会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 2020-03-25
      • 2021-04-12
      • 1970-01-01
      • 2021-12-09
      • 2012-12-16
      • 1970-01-01
      • 2019-03-23
      相关资源
      最近更新 更多