我创建了一个导入脚本,用于将包含车辆品牌和型号的电子表格转换为相关的数据库实体。电子表格中的源数组如下所示(每个都是电子表格行):
$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 array
函数之一。我尝试了以下方法,但没有创建品牌名称索引:
$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);
关于php - 在不使用 PHP 中的 foreach 的情况下从源数组创建一个新的、重新索引的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722263/