[英]Multidimensional array compare and create new array
我有兩個不同的數組:
首先:
Array(
[0] => Array
(
[sku] => A
)
[1] => Array
(
[sku] => B
)
[2] => Array
(
[sku] => A
)
)
第二:
Array(
[0] => Array
(
[sku] => A
[path] => 3
)
[1] => Array
(
[sku] => B
[path] => 3
)
[2] => Array
(
[sku] => C
[path] => 78
)
)
為了我應該刪除第一個數組中的重復項,然后比較兩個數組,找到相同的 SKU 並使用 sku 和相對路徑創建一個新數組。 我怎樣才能做到這一點?
在此先感謝您的幫助!
如果我正確地解決了問題,您需要第三個數組,其中包含 SKU 列表和第一個數組中存在的 SKU 的路徑。 以下代碼應該可以滿足您的需求。
<?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);
假設您的第二個數組中有唯一的 skus,您只需要在 skus 上相交:
<?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);
Output:
array (
'A' =>
array (
'sku' => 'A',
'path' => 3,
),
'B' =>
array (
'sku' => 'B',
'path' => 3,
),
)
或者獲取一個 sku 鍵映射到路徑的數組:
$sku_paths = array_intersect_key(array_column($two, 'path', 'sku'), array_column($one, null, 'sku'));
var_export($sku_paths);
Output:
array (
'A' => 3,
'B' => 3,
)
除了兩個已經存在的答案之外,我將在算法上對此進行更多描述,實際實現邏輯而不是用function
解決它,因此您可以從中學習。
$result = [];
foreach ($array1 as $key1 => $value1) {
foreach ($array2 as $key2 => $value2) {
if (!isset($result[$value1['sku']])) {
$result[$value1['sku']] = $value2['path'];
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.