如何组合条目,但删除不必要的重复数据



你好,我想知道是否有一种方法可以删除数组中的重复项,但将正确的值合并在一起?例如,如果有两个不同图像的同一产品,如何将图像组合成一个阵列,然后删除该条目以在阵列中有一个条目

$cars = array(
array(
"id" => 22,
"image" => "test.jpg",
"car" => "Volvo"
) ,
array(
"car_id" => 23,
"image" => "prototype.jpg",
"car" => "BMW"
) ,
array(
"car_id" => 22,
"image" => "test_1.jpg",
"car" => "Volvo"
) ,
array(
"car_id" => 25,
"image" => "unknown.jpg",
"car" => "KIA"
)
);

并输出:

Array
(
[0] => Array
(
[id] => 22
[image] => test.jpg
[car] => Volvo
)
[1] => Array
(
[car_id] => 23
[image] => prototype.jpg
[car] => BMW
)
[2] => Array
(
[car_id] => 22
[image] => test_1.jpg
[car] => Volvo
)
[3] => Array
(
[car_id] => 25
[image] => unknown.jpg
[car] => KIA
)
)

但是,我如何才能实现以下目标?

Array
(
[0] => Array
(
[id] => 22
[image] => Array 
(
[0] => test.jpg
[1] => test_1.jpg
)
[car] => Volvo
)
[1] => Array
(
[car_id] => 23
[image] => prototype.jpg
[car] => BMW
)
[2] => Array
(
[car_id] => 25
[image] => unknown.jpg
[car] => KIA
)
)

示例数据的一个解决方案可以是创建一个新的数组$result,并使用car的值作为关键字。在每次迭代中,检查键是否退出。如果没有,则将循环中的当前$car添加为该键的第一个值。

如果密钥确实存在,则将$car图像的字符串转换为包含该字符串的数组。

$result中已存在的图像字符串添加到新数组中,并使数组成为新值。

例如:

$result = [];
foreach ($cars as $car) {
if (!array_key_exists($car['car'], $result)) {
$result[$car['car']] = $car;
continue;
}
$car['image'] = (array)$car['image'];
$car['image'][] = $result[$car["car"]]["image"];
$result[$car['car']]['image'] = $car['image'];
}
print_r(array_values($result));

如果你不想把汽车作为钥匙,而是想把数字作为钥匙,你可以在最后的数组中使用array_values,比如:

print_r(array_values($result));

演示

结果

Array
(
[0] => Array
(
[id] => 22
[image] => Array
(
[0] => test_1.jpg
[1] => test.jpg
)
[car] => Volvo
)
[1] => Array
(
[car_id] => 23
[image] => prototype.jpg
[car] => BMW
)
[2] => Array
(
[car_id] => 25
[image] => unknown.jpg
[car] => KIA
)
)

最新更新