从源数组创建一个新的,重新索引的数组,而不使用PHP中的foreach

我创建了一个导入脚本,将包含车辆品牌和模型的电子表格转换为相关的数据库实体.我在电子表格中的源数组看起来像这样(每个都是一个电子表格行):

$rows = [
    ['Brand A', 'Model A'],
    ['Brand A', 'Model A'],
    ['Brand A', 'Model B'],
    ['Brand A', 'Model B'],
    ['Brand A', 'Model B'],
    ['Brand A', 'Model C'],
    ['Brand B', 'Model A'],
    ['Brand B', 'Model B'],
    ['Brand B', 'Model B'],
    ['Brand B', 'Model B'],
    ['Brand B', 'Model C'],
    ['Brand B', 'Model C'],
];

我想要这种格式的数据:

$data = [
    'Brand A' => [
        'Model A',
        'Model A',
        'Model B',
        'Model B',
        'Model B',
        'Model C',
    ],
    'Brand B' => [
        'Model A',
        'Model B',
        'Model B',
        'Model B',
        'Model C',
        'Model C',
    ],
];

我有一个使用foreach循环的工作示例:

$data = [];
foreach ($rows as $row) {
    $data[strval($row[0])][] => strval($row[1]);
}

如果可能的话,我想使用其中一个PHP数组函数.我尝试了以下但是没有创建品牌名称索引:

$data = array_map(function ($row) {
    return $data[strval($row[0])][] = strval($row[1]);
}, $rows);

该数组最终如下:

$data = [
    'Model A',
    'Model A',
    ...
];

这是可能的,还是我在浪费时间/工程设计呢?

PT 2:使品牌同时为品牌独特的奖励积分.

$data = [
    'Brand A' => [
        'Model A',
        'Model B',
        'Model C',
    ],
    'Brand B' => [
        'Model A',
        'Model B',
        'Model C',
    ],
];

解决方法:

一种方法是像这样使用array_reduce

$data = array_reduce($rows, function ($acc, $row) {
    $acc[$row[0]][] = $row[1];
    return $acc;
}, []);

为了使子数组唯一,您可以在之后使用array_map和array_unique的组合

$data = array_map(function ($subarr) {
    return array_unique($subarr);
}, $data);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...