Saya memiliki dua array berbeda:

Pertama:

Array(
 [0] => Array
        (
         [sku] => A
        )
 [1] => Array
        (
         [sku] => B
        )
 [2] => Array
        (
         [sku] => A
        )
)

Kedua:

Array(
 [0] => Array
        (
         [sku] => A
         [path] => 3
        )
 [1] => Array
        (
         [sku] => B
         [path] => 3
        )
 [2] => Array
        (
         [sku] => C
         [path] => 78
        )
)

Agar saya harus menghapus duplikat di array pertama, setelah itu bandingkan kedua array, temukan SKU yang sama dan buat array baru dengan sku dan jalur relatif. Bagaimana saya bisa mencapai ini?

Terima kasih sebelumnya atas bantuannya!

-1
Jeager 14 Desember 2020, 17:23

3 jawaban

Jawaban Terbaik

Anda hanya perlu berpotongan pada skus, dengan asumsi Anda memiliki skus unik di larik kedua Anda:

<?php

$one = 
[
    [
        'sku' => 'A'
    ],
    [
        'sku' => 'B'
    ],
    [
        'sku' => 'A'
    ]
];
$two = 
[
    [
        'sku' => 'A',
        'path' => 3
    ],
    [
        'sku' => 'B',
        'path' => 3
    ],
    [
        'sku' => 'C',
        'path' => 78
    ]
];


$result = array_intersect_key(array_column($two, null, 'sku'), array_column($one, null, 'sku'));
var_export($result);

Keluaran:

array (
    'A' => 
    array (
      'sku' => 'A',
      'path' => 3,
    ),
    'B' => 
    array (
      'sku' => 'B',
      'path' => 3,
    ),
  )

Atau untuk mendapatkan array dengan pemetaan kunci sku ke jalur:

$sku_paths = array_intersect_key(array_column($two, 'path', 'sku'), array_column($one, null, 'sku'));
var_export($sku_paths);

Keluaran:

array (
  'A' => 3,
  'B' => 3,
)
1
Progrock 14 Desember 2020, 15:17

Jika saya mendapatkan masalah dengan benar, Anda memerlukan larik ketiga dengan daftar SKU dan jalur untuk SKU yang ada di larik pertama. Kode berikut harus melakukan apa yang Anda cari.

<?php

$array1 = [
    [
        'sku' => 'A'
    ],
    [
        'sku' => 'B'
    ],
    [
        'sku' => 'A'
    ]
];

$array2 = [
    [
        'sku'  => 'A',
        'path' => 3
    ],
    [
        'sku'  => 'B',
        'path' => 3
    ],
    [
        'sku'  => 'C',
        'path' => 78
    ]
];

$uniqueSkuList = array_unique(array_map(static function ($el) {
    return $el['sku'];
}, $array1));

$array3 = [];
foreach ($array2 as $item) {
    if (in_array($item['sku'], $uniqueSkuList, true)) {
        $array3[] = $item;
    }
}

var_dump($array3);
1
Mikhail Prosalov 14 Desember 2020, 14:32

Selain dua jawaban yang sudah ada, saya akan menjelaskan ini secara lebih algoritmik, sebenarnya menerapkan logika alih-alih menyelesaikannya dengan function, sehingga Anda dapat belajar darinya.

$result = [];

foreach ($array1 as $key1 => $value1) {
    foreach ($array2 as $key2 => $value2) {
        if (!isset($result[$value1['sku']])) {
            $result[$value1['sku']] = $value2['path'];
        }
    }
}    
0
Progrock 14 Desember 2020, 18:20