如何简化(循环)if-else语句并获取mysql表列的名称(PHP)

如何简化(循环)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_

我需要帮助

场景:酒店,为客人登记入住。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_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啊,你当然明白了。我的错误。您收到这么多消息的原因是,如果发现一个空房间,循环不会停止。我已经更新了代码,现在应该可以正常工作了:不知道为什么你会在房间的桌子上有一个日期,但肯定是朝着正确的方向迈出了一步谢谢你发布了桌子结构。我用数组过滤器发布了更新的解决方案,但我建议使用数组搜索解决方案-作为单独的答案发布。这很有效。非常感谢我发布了更新的解决方案。现在对你有用吗?有用!我只需要添加密码和修改数据库名称。非常感谢: