PHP:如何创建锯齿状数组结构来表示数据库中的分组记录

时间:2011-02-24 10:49:46

标签: php jagged-arrays

这似乎是一个简单的挑战,但我正在努力。

我想在两个数据库表上使用连接查询检索记录,并将它们表示为数组数组,其中根数组中的每个元素都是父记录,每个嵌套元素代表一个子记录。

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 个答案:

答案 0 :(得分:1)

当您将它分配给频道时,$ programs数组中只有一个程序。

另一种方法是使用channel_key构建通道数组。

e.g。

<?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;
}

答案 1 :(得分:-1)

简单的解决方案可以。

$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;
}