[英]How to combine entries but remove unnecessary duplicated data?
您好,我想知道是否有一種方法可以刪除數組中的重復項,但將正確的值合並在一起? 例如,如果同一產品具有兩個不同的圖像,如何將圖像組合到一個數組中,然后刪除該條目以在數組中具有一個條目
$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
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.