Как из нескольких запросов к разным таблицам собрать вложенный массив в 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 сделать, подскажите, куда копать, точно не в ту сторону рою.


Ответы (0 шт):