簡體   English   中英

如何合並條目但刪除不必要的重復數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM