如何从mysql返回多维数组并返回codeigniter
如何使sql中的多维数组返回codeigniter中的行。从模型中返回值,保存$ res中的所有值?如何从mysql返回多维数组并返回codeigniter
$res = $this->user_model->get_room_book_join(['rooms.hotel_id' => 1]);
if ($res) {
echo '<pre>'
print_r($res)
}
这是我的型号代码。
function get_room_book_join($data) {
$this->db->join('room_overviews', 'rooms.room_id =
room_overviews.rom_id', 'left');
$q = $this->db->get_where('rooms', $data);
return $q->result_array();
}
我得到这种类型的array.this类型不能帮助我。
Array(
[0] => Array(
[room_id] => 1
[room_no] => 101
[room_desc] => Double Bed Deluxe Non Air Conditioned
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 0
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 1
[rom_id] => 1
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-12
)
[1] => Array
(
[room_id] => 1
[room_no] => 101
[room_desc] => Double Bed Deluxe Non Air Conditioned
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 0
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 2
[rom_id] => 1
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-13
)
[2] => Array
(
[room_id] => 1
[room_no] => 101
[room_desc] => Double Bed Deluxe Non Air Conditioned
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 0
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 3
[rom_id] => 1
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-14
)
[3] => Array
(
[room_id] => 1
[room_no] => 101
[room_desc] => Double Bed Deluxe Non Air Conditioned
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 0
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 4
[rom_id] => 1
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-15
)
[4] => Array
(
[room_id] => 2
[room_no] => 102
[room_desc] => Double Bed Deluxe Non Air Conditioned Room
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 2
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 5
[rom_id] => 2
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-12
)
[5] => Array
(
[room_id] => 2
[room_no] => 102
[room_desc] => Double Bed Deluxe Non Air Conditioned Room
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 2
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 6
[rom_id] => 2
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-13
)
[6] => Array
(
[room_id] => 2
[room_no] => 102
[room_desc] => Double Bed Deluxe Non Air Conditioned Room
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 2
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 7
[rom_id] => 2
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-14
)
[7] => Array
(
[room_id] => 2
[room_no] => 102
[room_desc] => Double Bed Deluxe Non Air Conditioned Room
[status] => available
[category_id] => 1
[hotel_id] => 1
[tariff_type] => normal
[room_rate] => 1000
[persons] => 2
[date_start] => 0000-00-00
[date_end] => 0000-00-00
[overview_id] => 8
[rom_id] => 2
[hot_id] => 1
[cus_id] => 2
[bok_id] => 2
[dates] => 2017-04-15
)
)
其实我想要这种类型的数组。我怎么能做到这一点。当['room_id']和['rom_id']都相等时,多维数组将被创建,['dates']将在单个数组[日期]中保存所有日期。
array(
[0]=>array(
[room_id]=>1
[dates]=>array(
[0]=>2014-04-12
[1]=>2014-04-13
[2]=>2014-04-14
[3]=>2014-04-15
)
)
[1]=>array(
[room_id]=>2
[dates]=>array(
[0]=>2014-04-12
[1]=>2014-04-13
[2]=>2014-04-14
[3]=>2014-04-15
)))
查看此示例使用正常的PHP循环。效率不高,但它会做你的工作。
$dbResponse[] = array(
'room_id' => 1,
'room_no' => 1,
'dates' => '2017-04-12',
);
$dbResponse[] = array(
'room_id' => 1,
'room_no' => 1,
'dates' => '2017-04-13',
);
$dbResponse[] = array(
'room_id' => 2,
'room_no' => 1,
'dates' => '2017-04-14',
);
$dbResponse[] = array(
'room_id' => 2,
'room_no' => 1,
'dates' => '2017-04-15',
);
$updatedList = array();
foreach ($dbResponse as $key => $value) {
$updatedList[$value['room_id']][]=$value['dates'];
}
echo '<pre>';
print_r($updatedList);
echo '</pre>';
$finalList = array();
foreach ($updatedList as $key => $value) {
$finalList[] = array(
'room_id' => $key,
'dates' => $value
);
}
echo '<pre>';
print_r($finalList);
echo '</pre>';
非常感谢...它为我工作。 – user8
更新回答
@ mi6crazyheart很好的答案。我想建议一点改变。您可以使用此代码来完成任务。如果我用room_id
替换索引键,我不认为这很重要。
$dbResponse[] = array(
'room_id' => 1,
'room_no' => 1,
'dates' => '2017-04-12',
);
$dbResponse[] = array(
'room_id' => 1,
'room_no' => 1,
'dates' => '2017-04-13',
);
$dbResponse[] = array(
'room_id' => 2,
'room_no' => 1,
'dates' => '2017-04-14',
);
$dbResponse[] = array(
'room_id' => 2,
'room_no' => 1,
'dates' => '2017-04-15',
);
$updatedList = array();
foreach ($dbResponse as $key => $value) {
$updatedList[$value['room_id']]['room_id']=$value['room_id'];
$updatedList[$value['room_id']]['dates'][]=$value['dates'];
}
echo '<pre>';
print_r($updatedList);
echo '</pre>';
老回答
您可以使用此代码来解决你的问题。
我已经改变了结果数组的一点点,但我认为这种格式的结果会更有帮助。(你可以从关键的房间ID)。
$result = array()
foreach ($res as $row) {
if($row['room_id'] === $row['rom_id'])
$result[$res['room_id']]['dates'][] = $row['dates'];
}
如需更多帮助,我很乐意提供帮助。
快乐编码!
是的,从性能的角度来看它更好,因为它从代码中删除了一个循环。我只是通过记住OP的要求来做到这一点。 – mi6crazyheart
@ mi6crazyheart谢谢你..你的代码给了我这个想法:) –
你能展示给模型代码吗? –
只是等待我给你 – user8
现在完成你可以看到 – user8