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