我创建了一个导入脚本,将包含车辆品牌和模型的电子表格转换为相关的数据库实体.我在电子表格中的源数组看起来像这样(每个都是一个电子表格行):
$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',
],
];
$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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。