Вставить массив в многомерную структуру

У меня есть массив с общими activity_code. Мне нужно добавить записи pri внутри поля элемента

Array
(
    [0] => Array
        (
            [pr] => Array
                (
                    [id] => 1
                    [activity_code] => 20220101PR0001
                    [serial_number] => 0001/2022
                )
            [pri] => Array
                (
                    [item] => Item 1
                    [description] => Description 1
                    [quantity] => 15
                    [unit] => Each
                    [unit_price] => 65000.00
                )
        )

    [1] => Array
        (
            [pr] => Array
                (
                    [id] => 1
                    [activity_code] => 20220101PR0001
                    [serial_number] => 0001/2022
                )

            [pri] => Array
                (
                    [item] => Item 2
                    [description] => Description 2
                    [quantity] => 15
                    [unit] => Each
                    [unit_price] => 2500.00
                )
        )
)

Предполагается, что внутри поля items должно быть 2 массива, но я вставляю только 1 массив.

Это код, я пробовал.

    foreach ($records as $key => $record) {
        $purchaseRequisition = $record['pr'];
        $items = $record['pri'];

        if (!array_key_exists($purchaseRequisition['activity_code'], $purchaseArray)) {
            $purchaseArray[$purchaseRequisition['activity_code']] = [];
        }
        $purchaseArray[$purchaseRequisition['activity_code']] = [
            'serialNumber' => $record['pr']['serial_number'],
            'items' => []
        ];

        $purchaseArray[$purchaseRequisition['activity_code']]['items'][$key] = $items;
    }

Это структура массива, которая мне нужна

array Structure

Может ли кто-нибудь сказать мне, какую ошибку я сделал здесь?

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
0
0
25
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы перезаписываете $purchaseArray[$purchaseRequisition['activity_code']], а не добавляете в него новый элемент. Чтобы вставить в массив, присвойте $array[].

foreach ($records as $key => $record) {
    $purchaseRequisition = $record['pr'];
    $items = $record['pri'];

    if (!array_key_exists($purchaseRequisition['activity_code'], $purchaseArray)) {
        $purchaseArray[$purchaseRequisition['activity_code']] = [];
    }
    $purchaseArray[$purchaseRequisition['activity_code']][] = [
        'serialNumber' => $record['pr']['serial_number'],
        'items' => []
    ];

    $purchaseArray[$purchaseRequisition['activity_code']]['items'][$key] = $items;
}

Я добавил структуру массива, которая мне нужна по моему вопросу.

user1687891 23.04.2022 07:52
Ответ принят как подходящий

Используйте приведенный ниже код:

foreach ($records as $key => $record) {
        $purchaseRequisition = $record['pr'];
        $items[] = $record['pri'];

        if (!array_key_exists($purchaseRequisition['activity_code'], $purchaseArray)) {
            $purchaseArray[$purchaseRequisition['activity_code']] = [];
        
        }
        $purchaseArray[$purchaseRequisition['activity_code']] = [
            'serialNumber' => $record['pr']['serial_number'],
            'items' => []
        ];


        $purchaseArray[$purchaseRequisition['activity_code']]['items'] = $items;
        
    }

Нет, это не помещает все элементы в массив items

user1687891 23.04.2022 07:53

Я отредактировал код. Пожалуйста, попробуйте сейчас.

Sachin 23.04.2022 07:56

Спасибо. Я нашел свою ошибку.

user1687891 23.04.2022 07:57

Другие вопросы по теме