多维数组比较并创建新数组



我有两个不同的数组:

第一:

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
$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);

输出:

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);

输出:

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

如果我正确地解决了问题,您需要第三个数组,其中包含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);

除了两个已经存在的答案之外,我将用算法来描述这一点,实际实现逻辑,而不是用function来解决它,所以你可以从中学习。

$result = [];
foreach ($array1 as $key1 => $value1) {
foreach ($array2 as $key2 => $value2) {
if (!isset($result[$value1['sku']])) {
$result[$value1['sku']] = $value2['path'];
}
}
}    

相关内容

  • 没有找到相关文章

最新更新