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