如何简化(循环)if-else语句并获取mysql表列的名称(PHP)
我需要帮助 场景:酒店,为客人登记入住。MySQL数据库中的数据如何简化(循环)if-else语句并获取mysql表列的名称(PHP),php,mysql,Php,Mysql,我需要帮助 场景:酒店,为客人登记入住。MySQL数据库中的数据 const EMPTY_ROOM = 0; const OCCUPIED_ROOM = 1; $rows = mysql_fetch_array($result); $emptyRooms = array_filter($rows, function($room_value) { return EMPTY_ROOM === $room_value; }); if(empty($emptyRooms) || !is_
const EMPTY_ROOM = 0;
const OCCUPIED_ROOM = 1;
$rows = mysql_fetch_array($result);
$emptyRooms = array_filter($rows, function($room_value) {
return EMPTY_ROOM === $room_value;
});
if(empty($emptyRooms) || !is_array($emptyRooms)) {
echo 'None!';
return;
}
$rooms = array_keys($emptyRooms);
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL;
MySQL:
CREATE TABLE IF NOT EXISTS `hotels` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Room01` int(11) NOT NULL,
`Room02` int(11) NOT NULL,
`Room03` int(11) NOT NULL,
`Room04` int(11) NOT NULL,
`Room05` int(11) NOT NULL,
`Room06` int(11) NOT NULL,
`Room07` int(11) NOT NULL,
`Room08` int(11) NOT NULL,
`Room09` int(11) NOT NULL,
`Room10` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
$result=mysql_querySELECT*来自名称为'hotel1'的酒店
$row=mysql\u fetch\u array$result
$room01=$row['room01']
0=空,1=不空
这是我的密码:
<?php
//example
$room01=1;
$room02=1;
$room03=0;
$room04=0;
//example
if ($room01 == 0)
{
echo "Your room is room01.";
}
elseif ($room02 == 0)
{
echo "Your room is room02.";
}
elseif ($room03 == 0)
{
echo "Your room is room03.";
}
elseif ($room04 == 0)
{
echo "Your room is room04.";
}
else
{
echo "None!";
}
?>
结果:您的房间是03房间
如果我有100个房间呢?
如何简化if-else语句并获取房间名称?这应该可以在内部进行小的解释:
$row = mysql_fetch_array($result);
$roomNumber = 1;
//Get data from array
foreach($row as $data){
//if room returns 0 (empty)
if($data == 0){
if($roomNumber < 10){
echo "Your room is room0". $roomNumber;
break;
} else {
echo "Your room is room". $roomNumber;
break;
}
} else {
$roomNumber++;
}
}
使用这种类型的数据库设计,您可以轻松地在系统中添加和删除酒店。使用Hotel_id作为参考,您现在可以轻松地向酒店添加和删除房间,而无需使用大量的表列
要使用它,您只需查询房间内的酒店id即可返回所有房间。之后,只需检查第一个房间编号,其中“已占用”返回0。用于从数据库结果中查找所有空房间,然后打印第一个房间名称(如果有)。下面是如何编写代码,而不用假设数据库中有100个或n个房间
const EMPTY_ROOM = 0;
const OCCUPIED_ROOM = 1;
$rows = mysql_fetch_array($result);
$emptyRooms = array_filter($rows, function($room_value) {
return EMPTY_ROOM === $room_value;
});
if(empty($emptyRooms) || !is_array($emptyRooms)) {
echo 'None!';
return;
}
$rooms = array_keys($emptyRooms);
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL;
更新:这可能是因为严格检查失败为空==$room\u值。当您从数据库获取数据时,$room_值保存字符串数据。以下是更新的代码:
function readDatabase() {
$handle = mysql_connect('localhost', 'root');
mysql_select_db('stackexchange');
if(!$handle) {
exit(mysql_error($handle));
}
$result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle);
return mysql_fetch_array($result, MYSQL_ASSOC);
}
$row = readDatabase();
const EMPTY_ROOM = '0';//set to string value to compare against database value
//use `array_slice` to get rid of columns: `id`, `Name`, `Date`.
//We want to search only in remaining columns: Room01, Room02 .... RoomN.
$row = array_slice($row, 3);
$emptyRooms = array_filter($row, function($room_value) {
return EMPTY_ROOM === $room_value;
});
if(empty($emptyRooms) || !is_array($emptyRooms)) {
echo 'None!';
return;
}
$rooms = array_keys($emptyRooms);
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL;
function readDatabase() {
$handle = mysql_connect('localhost', 'root');
mysql_select_db('stackexchange');
if(!$handle) {
exit(mysql_error($handle));
}
$result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle);
return mysql_fetch_array($result, MYSQL_ASSOC);
}
const EMPTY_ROOM = 0;
const OCCUPIED_ROOM = 1;
$row = readDatabase();
//use `array_slice` to get rid of columns: `id`, `Name`, `Date`. We want to search only in remaining columns: Room01, Room02 .... RoomN.
$roomNumber = array_search(EMPTY_ROOM, array_slice($row, 3));
if(false === $roomNumber) {
echo 'None!';
return;
}
echo 'Your room is ' . $roomNumber . '.' . PHP_EOL;
使用
更新
嗯,我用测试数据生成输入。使用您的表结构,以下是更新的代码:
function readDatabase() {
$handle = mysql_connect('localhost', 'root');
mysql_select_db('stackexchange');
if(!$handle) {
exit(mysql_error($handle));
}
$result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle);
return mysql_fetch_array($result, MYSQL_ASSOC);
}
$row = readDatabase();
const EMPTY_ROOM = '0';//set to string value to compare against database value
//use `array_slice` to get rid of columns: `id`, `Name`, `Date`.
//We want to search only in remaining columns: Room01, Room02 .... RoomN.
$row = array_slice($row, 3);
$emptyRooms = array_filter($row, function($room_value) {
return EMPTY_ROOM === $room_value;
});
if(empty($emptyRooms) || !is_array($emptyRooms)) {
echo 'None!';
return;
}
$rooms = array_keys($emptyRooms);
echo 'Your room is ' . $rooms[0] . '.' . PHP_EOL;
function readDatabase() {
$handle = mysql_connect('localhost', 'root');
mysql_select_db('stackexchange');
if(!$handle) {
exit(mysql_error($handle));
}
$result = mysql_query("SELECT * FROM hotels WHERE Name = 'hotel1'", $handle);
return mysql_fetch_array($result, MYSQL_ASSOC);
}
const EMPTY_ROOM = 0;
const OCCUPIED_ROOM = 1;
$row = readDatabase();
//use `array_slice` to get rid of columns: `id`, `Name`, `Date`. We want to search only in remaining columns: Room01, Room02 .... RoomN.
$roomNumber = array_search(EMPTY_ROOM, array_slice($row, 3));
if(false === $roomNumber) {
echo 'None!';
return;
}
echo 'Your room is ' . $roomNumber . '.' . PHP_EOL;
这段代码是您想要使用的,还是只是一个澄清您的问题的示例?您需要使用类似于“您的房间是房间+$roomNumber+”。;为什么不检查SQL是否为空@罗德弗罗斯特。是用于PHP.Oops中的连接,PHP已经有一段时间了。只是试着给出一个一般的例子。你可能不应该每个房间都有一个专栏。所以,如果你有100个房间,你不应该有100列。谢谢。我试试看,不客气。虽然我建议在你测试答案之前不要接受它,看看它是否有效。谢谢,我收到了很多房间的留言,弄得一团糟,弄不清是怎么回事。我只是补充了更多关于这个问题的信息。mysqltable@TankVvv啊,你当然明白了。我的错误。您收到这么多消息的原因是,如果发现一个空房间,循环不会停止。我已经更新了代码,现在应该可以正常工作了:不知道为什么你会在房间的桌子上有一个日期,但肯定是朝着正确的方向迈出了一步谢谢你发布了桌子结构。我用数组过滤器发布了更新的解决方案,但我建议使用数组搜索解决方案-作为单独的答案发布。这很有效。非常感谢我发布了更新的解决方案。现在对你有用吗?有用!我只需要添加密码和修改数据库名称。非常感谢: