Объединить 2 массива объекта, используя ключ / идентификатор

Я хочу объединить 2 массива объектов на основе поля ‘id’ Array1 и ‘itemVendorCode’ Array2. Я также хотел удалить из результирующих массивов объекта все, что не соответствовало.

Array1:

Array
(
[0] => stdClass Object
(
[id] => 10-423-1176
[qty] => 2
[price] => 12.6
)

[1] => stdClass Object
(
[id] => 89-575-2354
[qty] => 24
[price] => 230.35
)

[2] => stdClass Object
(
[id] => 89-605-1250
[qty] => 2
[price] => 230.35
)
)

array2:

Array
(
[0] => Item Object
(
[internalId] => 14062
[itemVendorCode] => 89-605-1250
)

[1] => Item Object
(
[internalId] => 33806
[itemVendorCode] => 89-575-2354
)

[2] => Item Object
(
[internalId] => 64126
[itemVendorCode] => 26-295-1006
)
)

1

Решение

Я смог решить это с помощью этого кода:

$indexed = array();

foreach($itemsArray as $value) {
$indexed[$value->itemVendorCode] = $value;
}$results = array();

foreach($vendorItems as $obj) {
$value = $indexed[$obj->id];

if (isset($value)) {
foreach($value as $name => $val) {
$obj->$name = $val;
array_push($results, $obj);
}
}

}

print_r($results);

кредиты на оригинальный постер. Я просто немного его изменил,

Я смог получить такой результат:

Array
(
[0] => stdClass Object
(
[id] => 10-423-1176
[qty] => 2
[price] => 12.6
[internalId] => 2035
[itemVendorCode] => 10-423-1176
)

[1] => stdClass Object
(
[id] => 10-423-1176
[qty] => 2
[price] => 12.6
[internalId] => 2035
[itemVendorCode] => 10-423-1176
)

[2] => stdClass Object
(
[id] => 14-102-1010
[qty] => 16
[price] => 3.2
[internalId] => 57033
[itemVendorCode] => 14-102-1010
)
)
1

Другие решения

Я думаю, что вам придется использовать функцию array_map, которая предоставляет вам функцию обратного вызова для выполнения на массив (ы).

В функции обратного вызова:
— объявить свой массив1
— foreach второй массив
— установить оператор if, чтобы проверить, что текущая итерация со значением id соответствует itemVendorCode массива 2 и вернуть его

что-то вроде этого:

// You have to specify to PHP to use a local copy of your $array2 to works with it into your callback
$cb = function ($obj1) use ($array2)
{
// you foreach this array
foreach ($array2 as $obj2) {
// if the value of id matches itemVendorCode
if ($obj1->id === $obj2->itemVendorCode) {
// you return the id
return $obj->id;
}
}
};

// this function will fill a new array with all returned data
$mergedArray = array_map($cb, $array1);

Этот код является примером, но он не предоставляет вам, ваше нужное решение, попробуйте обновить его, чтобы делать то, что вы именно хотите;)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector