Привести данные из таблицы в такую структуру ассоциативного массива

387
18 января 2017, 02:25

Доброго времени суток. Дабы не загружать Вас лишней информацией, вкратце и с примерами, опишу в чём проблема. Дело в том, что с базы данных MySQL я получаю некоторые данные. Проблема в том, что их нужно привести к определенному виду массива, а я даже не представляю как.

У нас есть таблица в базе данных и все ячейки, которые отвечают определенной группе. К примеру, группе с ID №1 должны быть помещены в один ассоциативный массив.

Пример этой таблички:

А вот и пример массива этого:

$data = array(
    array(
        'modname' => 'Lorem',
        'pricing' => array(
            '0' => 0.03,
            '1' => 0.15, 
            '2' => 0.50
        ),
        'names' => array(
            '0' => 'Lorems +0.03',
            '1' => 'Ipsum +0.15',
            '2' => 'Dolor +0.50'
        )
    ),
    array(
        'modname' => 'Ipsum',
        'pricing' => array(
            '0' => 0.08,
            '1' => 0.20, 
            '2' => 0.60
        ),
        'names' => array(
            '0' => 'Sie +0.08',
            '1' => 'A +0.20',
            '2' => 'Mat +0.60'
        )
    )
);

Так вот, пока даже нет представления, как это можно реализовать в коде. Как так ячейки по определенному ID Group помещать в массив? Можно использовать if-else, но как проделать это всё в массиве?

Надеюсь на Вашу помощь.

UPD: Добавлю небольшой пример для лучшего понимания:

Представьте магазин, в нем есть товар - кровати.

Есть цена за кровать, но есть "модификаторы", которые влияют на цену. К примеру: размер кровати, цвет кровати, размещение дополнительных полочек. Вот суть в том, чтобы с БД как-то значения вытягивать и группировать по ID. Т.е. цвета к цветам, полочки к полочкам, размеры к размерам. И группировать всё это нужно именно в ассоциативном массиве, так как на примере.

Answer 1

Допустим исходные данные уже извлечены и находятся в массиве input:

$input = [
           ['id_group' => 1, 'name' => "Lorem", 'price' => 0.03],
           ['id_group' => 2, 'name' => "Sie",   'price' => 0.08],
           ['id_group' => 1, 'name' => "Ipsum", 'price' => 0.15],
           ['id_group' => 1, 'name' => "Dolor", 'price' => 0.50],
           ['id_group' => 2, 'name' => "A",     'price' => 0.20],
           ['id_group' => 2, 'name' => "Mat",   'price' => 0.60],
    ];

очевидно, что обрабатывать мы их будем в цикле. Каждый раз, когда мы встречаем новый id_group мы должны добавлять элемент в результирующий массив. При этом имя текущего элемента будет определять name группы. После чего по номеру группы мы должны добавить элементы pricing и names.

$result = [];
foreach($input as $d){
    $gId = $d['id_group'];
    //новая группа
    if(!isset($result[$gId])){
        $result[$gId] = [
                'modname' => $d['name'],
                'pricing' => [],
                'names'   => [],
             ];
    }
    $result[$gId]['pricing'][] = $d['price'];
    $result[$gId]['names'][] = sprintf("%s %+.2f", $d['name'], $d['price']);
}

Искомый результат вывода:

Array (
[1] => Array
    (
        [modname] => Lorem
        [pricing] => Array
            (
                [0] => 0.03
                [1] => 0.15
                [2] => 0.5
            )
        [names] => Array
            (
                [0] => Lorem +0.03
                [1] => Ipsum +0.15
                [2] => Dolor +0.50
            )
    )
[2] => Array
    (
        [modname] => Sie
        [pricing] => Array
            (
                [0] => 0.08
                [1] => 0.2
                [2] => 0.6
            )
        [names] => Array
            (
                [0] => Sie +0.08
                [1] => A +0.20
                [2] => Mat +0.60
            )
    )

)

READ ALSO
Пути к изображениям wordpress

Пути к изображениям wordpress

Возникла надобность натянуть верстку на Wordpress, за основу взял чистый шаблон, но никак не могу понять как правильно прописать пути к изображениям...

450
Autonumeric удалить лишние нули

Autonumeric удалить лишние нули

Как удалить в autoNumeric в input дробную часть из лишних нулей Параметр mDec добавляет дробную часть, но при снятии фокуса с элемента, если дробная...

553
Запуск mono через supervisor, программно

Запуск mono через supervisor, программно

ПриветВ общем надо запустить через supervisor парочку приложений написанных на c# с передачей аргументов и заставить их автоматически перезапускаться...

405