PHP: Как создать структуру зубчатых массивов для представления сгруппированных записей из базы данных - PullRequest
0 голосов
/ 24 февраля 2011

Это похоже на простой вызов, но я борюсь.

Я хочу получить записи, используя запрос на соединение двух таблиц базы данных, и представить их в виде массива массивов, причем каждый из элементов корневого массива является родительской записью, а каждый вложенный элемент представляет дочернюю запись.

SQL-запрос работает нормально и возвращает набор строк, в которых столбец channel_key является столбцом группировки.

Вот моя попытка заполнения структуры массива из строк:

$rows = $db->get_results($query);
$key = '';
$programmes = array();

foreach ($rows as $row) {
    $programme = array(
        'title' => $row->title,
        'start' => $row->start,
        'duration' => $row->duration
    );

    $programmes[] = $programme;

    if ($key != $row->channel_key) {
        $channels[] = array(
            'key' => $row->channel_key,
            'programme' => $programmes
        );

        $key = $row->channel_key;
        $programmes = array();
    }
}

К сожалению, это заполняет только массивы корневого уровня (те, которые соответствуют родительским записям).

Любые предложения, пожалуйста?

Спасибо, Тим

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

У вас есть только одна программа в массиве $ Programs, когда вы назначаете ее каналу.

Альтернативой может быть построение массива канала с ключом channel_key.

Например,

<?php
$channels = array();
foreach($rows as $row) {
    // Create the channel node if it doesn't exist
    if (!isset($channels[$row->channel_key])) {
        $channels[$row->channel_key] = array(
            'key' => $row->channel_key,
            'programme' => array()
        );
    }

    $programme = array(
        'title' => $row->title,
        'start' => $row->start,
        'duration' => $row->duration
    );

    // Add to the existing channel node.
    $channels[$row->channel_key]['programme'][] = $programme;
}
0 голосов
/ 24 февраля 2011

Простым решением может быть.

$rows = $db->get_results($query);
$key = '';
$programmes = array();

foreach ($rows as $row) {
    $programme = array(
        'title' => $row->title,
        'start' => $row->start,
        'duration' => $row->duration
    );

$programmes[$row->channel_key][] = $programme;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...