#php #multidimensional-array
#php #многомерный массив
Вопрос:
У меня есть два разных массива:
Первый:
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
)
)
Для того, чтобы я должен был удалить дубликат в первом массиве, после этого сравнить оба двух массива, найти тот же артикул и создать новый массив с артикулом и относительным путем. Как я могу этого добиться?
Заранее спасибо за помощь!
Комментарии:
1. Вы забыли добавить вопрос. В чем именно ваша проблема?
Ответ №1:
Вам просто нужно пересечь артикулы, предполагая, что у вас есть уникальные артикулы во втором массиве:
<?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,
)
Комментарии:
1. Спасибо! это то, что мне нужно. Это работает 🙂
Ответ №2:
Если я правильно понял проблему, вам нужен третий массив со списком артикулов и путей для артикулов, который существует в первом массиве. Следующий код должен делать то, что вы ищете.
<?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);
Ответ №3:
В дополнение к двум уже существующим ответам я опишу это более алгоритмически, фактически реализуя логику, а не решая ее с помощью a function
, чтобы вы могли извлечь из этого уроки.
$result = [];
foreach ($array1 as $key1 => $value1) {
foreach ($array2 as $key2 => $value2) {
if (!isset($result[$value1['sku']])) {
$result[$value1['sku']] = $value2['path'];
}
}
}