2011-02-24 59 views
0

这似乎是一个简单的挑战,但我很挣扎。PHP:如何创建锯齿阵列结构来表示来自数据库的分组记录

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

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(); 
    } 
} 

可惜,这只是填充根级别阵列(对应于父记录的那些)。

有什么建议吗?

感谢, 添

+0

我想一些示例结果和一个示例**期望的**数组结构来帮助我们可视化您想要实现的目标将在这里有很长的路要走。 – Leigh 2011-02-24 10:53:53

回答

1

你只有$程序阵列中的一个程序,当你把它分配给通道。

另一种方法是用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

谢谢 - 我使它变得比它需要的复杂得多。 – 2011-02-24 11:09:56

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