Php 将Mysql数据转换为数组列表

Php 将Mysql数据转换为数组列表,php,mysql,arrays,arraylist,Php,Mysql,Arrays,Arraylist,我有这样的数据库结果集 Array ( [0] => Array ( [StartTime] => 2014-06-24 12:30:00 [EndTime] => 2014-06-24 13:50:00 [Date] => 2014-06-24 [BookingId] => 2 [TableId] => 39 ) [1] => Array (

我有这样的数据库结果集

Array
(
[0] => Array
    (
        [StartTime] => 2014-06-24 12:30:00
        [EndTime] => 2014-06-24 13:50:00
        [Date] => 2014-06-24
        [BookingId] => 2
        [TableId] => 39
    )

[1] => Array
    (
        [StartTime] => 2014-06-24 13:50:00
        [EndTime] => 2014-06-24 16:20:00
        [Date] => 2014-06-24
        [BookingId] => 3
        [TableId] => 39
    )

[2] => Array
    (
        [StartTime] => 2014-06-24 06:30:00
        [EndTime] => 2014-06-24 07:10:00
        [Date] => 2014-06-24
        [BookingId] => 4
        [TableId] => 37
    )


[7] => Array
    (
        [StartTime] => 2014-06-29 06:30:00
        [EndTime] => 2014-06-29 07:00:00
        [Date] => 2014-06-29
        [BookingId] => 9
        [TableId] => 39
    )


[9] => Array
    (
        [StartTime] => 2014-06-26 12:30:00
        [EndTime] => 2014-06-26 15:00:00
        [Date] => 2014-06-26
        [BookingId] => 11
        [TableId] => 37
    )
)
我需要下面这样的阵列,请帮助我

Array
(
[0] => Array
    (
        [Date] => 2014-06-24
        [Tables] => Array
            (
                 [0] => Array
                 (
                    [TableId] => 39
                    [Reservations] => Array
                    (
                            [0] => Array
                                (
                                    [BookingId] => 2
                                )

                            [1] => Array
                                (
                                    [[BookingId] => 3
                                )
                    )
                )
                [1] => Array
                 (
                    [TableId] => 37
                    [Reservations] => Array
                    (
                            [0] => Array
                                (
                                    [BookingId] => 4
                                )

                    )
                )
            )   
        )



    [1] => Array
    (
        [Date] => 2014-06-26
        [Tables] => Array
            (
                 [0] => Array
                 (
                    [TableId] => 37
                    [Reservations] => Array
                    (
                            [0] => Array
                                (
                                    [BookingId] => 11
                                )

                    )
                )

            )   
    )

    [2] => Array
    (
        [Date] => 2014-06-29
        [Tables] => Array
            (
                 [0] => Array
                 (
                    [TableId] => 39
                    [Reservations] => Array
                    (
                            [0] => Array
                                (
                                    [BookingId] => 9
                                )

                    )
                )

            )   
    )
)   
我使用以下代码在CODEIGNITER框架php中获得了结果

我就这样试过,

函数示例(){

但是我无法获取上面的数组列表
所以请帮助我,我没有测试过,但是类似的东西

首先,将数组排序为日期顺序和日期内的tableid顺序(您可能可以在获取数组数据的SQL查询中执行此操作)

然后循环跟踪日期/表格中的更改,以设置日期/表格的计数器

<?php

$Out = array();
$prev_date = '';
$prev_table = '';
$day = -1;
$table = -1;

// Sort the array into date order, and table order within date
usort($some_array, "cmp");

foreach($some_array AS $some_array_item)
{
    if ($some_array_item['Date'] != $prev_date)
    {
        $day++;
        $Out[$day] = array();
        $Out[$day]['Date'] = $some_array_item['Date'];
        $Out[$day]['Tables'] = array();
        $table = -1;
        $prev_date = $some_array_item['Date'];
        $prev_table = '';
    }
    if ($some_array_item['TableId'] != $prev_table)
    {
        $table++;
        $Out[$day]['Tables'][$table]['TableId'] = $some_array_item['TableId'];
        $Out[$day]['Tables'][$table]['Reservations'] = array();
        $prev_table = $some_array_item['TableId'];
    }
    $Out[$day]['Tables'][$table]['Reservations'][] = array('BookingId'=>$some_array_item['BookingId']);
}

function cmp($a, $b)
{
    if ($a['Date'] == $b['Date']) 
    {
        if ($a['Date']['TableId'] == $b['Date']['TableId']) 
        {
            return 0;
        }
        return ($a['Date']['TableId'] < $b['Date']['TableId']) ? -1 : 1;
    }
    return ($a['Date'] < $b['Date']) ? -1 : 1;
}

?>


你试过做什么吗?是的,我试过了,但我什么也没有得到,实际上我需要将最终结果转换为JSONY你必须展示你试过的内容(代码)谢谢你的回答它帮了我很多,它救了我。谢谢
<?php

$Out = array();
$prev_date = '';
$prev_table = '';
$day = -1;
$table = -1;

// Sort the array into date order, and table order within date
usort($some_array, "cmp");

foreach($some_array AS $some_array_item)
{
    if ($some_array_item['Date'] != $prev_date)
    {
        $day++;
        $Out[$day] = array();
        $Out[$day]['Date'] = $some_array_item['Date'];
        $Out[$day]['Tables'] = array();
        $table = -1;
        $prev_date = $some_array_item['Date'];
        $prev_table = '';
    }
    if ($some_array_item['TableId'] != $prev_table)
    {
        $table++;
        $Out[$day]['Tables'][$table]['TableId'] = $some_array_item['TableId'];
        $Out[$day]['Tables'][$table]['Reservations'] = array();
        $prev_table = $some_array_item['TableId'];
    }
    $Out[$day]['Tables'][$table]['Reservations'][] = array('BookingId'=>$some_array_item['BookingId']);
}

function cmp($a, $b)
{
    if ($a['Date'] == $b['Date']) 
    {
        if ($a['Date']['TableId'] == $b['Date']['TableId']) 
        {
            return 0;
        }
        return ($a['Date']['TableId'] < $b['Date']['TableId']) ? -1 : 1;
    }
    return ($a['Date'] < $b['Date']) ? -1 : 1;
}

?>