Я читал этот вопрос здесь, так как у меня похожая проблема:
Объединение двух многомерных ассоциативных массивов
У меня очень похожая проблема, когда я пытаюсь объединить 2 ассоциативных массива вместе, но они действуют в модели «родитель / потомок», где для каждого родительского массива может быть несколько дочерних массивов.
Часть, над которой я работаю, - это интеграция новой облачной системы EPOS с устаревшей системой ERP, для которой требуется вывод данных в определенном формате файлов. Для каждой транзакции требуется строка заголовка транзакции (TH), а затем вложенные строки для каждого элемента в транзакции EPOS (TO).
Каждый массив является результатом запроса Mysql для представлений, которые я написал, чтобы учесть более короткие запросы select во время выполнения. Я перебираю несколько циклов, чтобы собрать транзакционные данные и записать их в мою базу данных как отдельный процесс, который будет выполняться по расписанию.
В качестве примера массивов исходных данных приведены следующие (var_dump каждого):
Пример родительской записи:
array(1)
{ [0]=> array(53)
{ ["Identifier"]=> string(2) "TH"
["Trans_ID"]=> string(9) "157976911"
["Trans_Date_Time"]=> string(19) "2017-10-19 11:38:13"
["Till_ID"]=> string(5) "30481"
["TILL_NAME"]=> string(5) "Till1"
["Cashier_Name"]=> string(12) "Cashier_Name"
["Branch_Ref"]=> string(5) "16783"
["Order_Number"]=> string(0) ""
["Original_Invoice"]=> string(0) ""
["Returns_Number"]=> string(0) ""
["Obselete1"]=> string(0) ""
["Obselete2"]=> string(0) ""
["Obselete3"]=> string(0) ""
["Obselete4"]=> string(0) ""
["Obselete5"]=> string(0) ""
["Obselete6"]=> string(0) ""
["Obselete7"]=> string(0) ""
["Obselete8"]=> string(0) ""
["Trans_Type"]=> string(4) "till"
["Trans_Status"]=> string(4) "sold"
["Customer_ID"]=> NULL
["Obselete9"]=> string(0) ""
["Customer_Ref"]=> string(0) ""
["Cust_Surname"]=> NULL
["Cust_Forename"]=> NULL ["Title"]=> NULL
["Cust_add1"]=> string(0) ""
["Cust_add2"]=> string(0) ""
["Cust_City"]=> string(0) ""
["Cust_State"]=> string(0) ""
}
}
И пример исходных дочерних записей [0]:
array(2)
{ [0]=> array(30)
{ ["tran_id"]=> string(9) "157976911"
["row_head"]=> string(2) "TO"
["sku"]=> string(0) ""
["barcode"]=> string(0) ""
["item_name"]=> string(12) "Merlot Large"
["item_style"]=> string(21) "250ml glass of Merlot"
["qty"]=> string(1) "1"
}
}
Как указано выше, дочерние массивы предназначены для каждого продукта в транзакциях EPOS, поэтому может быть несколько дочерних массивов для одного родителя. Я включил идентификатор транзакции в дочерние (TO), массивы на данный момент, но это должно быть опущено в окончательном выводе.
В результате я немного изо всех сил пытаюсь придумать, как я могу вложить несколько строк TO в каждый соответствующий TH.
Таким образом, пример формата файла с разделителем трубы будет:
TH | 1 | х | хх | х | хх | х | х
К | 1 | х | ому | х | ому | х | х
К | 1 | х | ому | х | ому | х | х
TH | 2 | х | хх | х | хх | х | х
К | 2 | х | ому | х | ому | х | х
Все работает, чтобы написать файл на моем локальном компьютере, но застрял на этих массивах.