Как из нескольких запросов к разным таблицам собрать вложенный массив в PHP (Wordpress)
Собственно задачка, имеется две таблицы: 1. Таблица product, поля таблицы: id, name, if_address, coef. 2. Таблица nomenclature, поля таблицы: id, product_id, name, price. Необходимо получить структуру следующего вида
product:
0:
id: "1"
name: "Product 1"
if_address: "0"
coef: "1.2"
nomenclature:
0:
id: "1"
product_id: "1"
name: "Nomenclature 1"
price: "100"
1:
id: "3"
product_id: "1"
name: "Nomenclature 3"
price: "300"
1:
id: "2"
name: "Product 2"
if_address: "1"
coef: "1.3"
nomenclature:
0:
id: "2"
product_id: "2"
name: "Nomenclature 2"
price: "200"
1:
id: "4"
product_id: "2"
name: "Nomenclature 4"
price: "400"
т.е. вложить один массив в другой, объединить но не на одно уровне. Делаю как то так:
function get_all_product {
$product = [];
global $wpdb;
$products = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'product;');
function get_nomenclatures($product_id) {
global $wpdb;
return $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'nomenclature WHERE product_id = '. $product_id . ';');
}
foreach($products as $key => $value) {
array_push($product, $value);
foreach (get_nomenclatures($value->id) as $key1 => $value1) {
$nomenclature = [];
array_push($nomenclature, $value1);
array_push($product, $nomenclature);
}
}
return $product;
}
Но в таком случае, данные объединяются на одном уровне.
Пробовал по другому:
foreach($products as $key => $value) {
array_push($product, $value);
foreach (get_nomenclatures($value->id) as $key1 => $value1) {
$nomenclature = [];
array_push($nomenclature, $value1);
$final = array_merge((array) $value, array('nomenclature' => $nomenclature));
}
}
return $final;
В этом случае, структура выстраивается как надо, единственно, она в цикле переопределяется и выводится только крайняя интерация и родительский массив product не содержит индекс:
product:
id: "2"
name: "Product 2"
if_address: "1"
coef: "1.3"
nomenclature:
0:
id: "4"
product_id: "2"
name: "Nomenclature 4"
price: "400"
В общем не соображу как это в php сделать, подскажите, куда копать, точно не в ту сторону рою.