使用MySQL查询创建了一个值数组,我需要检查它们是否都至少等于给定值。这是为了检查酒店的房间供应情况。
首先我做MySQL查询:
foreach( $datearray as $value ) {
$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo JOIN ex_rooms ON ex_cupo.room_id=ex_rooms.room_id AND ex_rooms.room_id = '$room_id' AND dt = '$value'";
$avail = mysql_query($query_avail, $MySQL_extranet) or die(mysql_error());
$row_avail = mysql_fetch_assoc($avail);
$availresult[] = $row_avail['cupo'];
}
“Cupo”是指特定日期的房间数量,因此$ availresult将是一系列日期范围内的房间数量。
现在,如果有人想为这些日期预订(比方说)2个房间,我需要确保数组中的每个值至少为2.例如,如果该范围内有5个日期且它们是2,则,1,2,2,我需要返回false,但如果它们是2,2,2,2,2或2,2,3,2,2,我需要返回true。
我该怎么做? (我希望我解释得很好。)
显然,选择2只是一个例子。它通常是一个名为$ numrooms的变量。
答案 0 :(得分:4)
在SQL代码中添加WHERE cupo > 2
。让数据库只给你你想要的结果,而不是通过结果来检查你自己的2&#2。
如果您需要更改它,请使用参数化查询。有关详细信息,请参阅http://php.net/manual/en/security.database.sql-injection.php。
答案 1 :(得分:2)
您应该将房间数传递给您的sql语句作为条件 如:
$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo
JOIN ex_rooms ON ex_cupo.room_id=ex_rooms.room_id AND
ex_rooms.room_id = '$room_id' AND dt = '$value' WHERE cupo > 1";
因为第一个可能是你的PHP传递值。
答案 2 :(得分:2)
$testArray = array(2,2,2,2,1,2);
$valid = array_reduce(
$testArray,
function ($match, $value) {
return $match && ($value >= 2);
},
TRUE
);
var_dump($valid);
修改强>
如何通过$ numrooms:
$testArray = array(2,2,2,2,1,2);
$numrooms = 2;
$valid = array_reduce(
$testArray,
function ($match, $value) use ($numrooms) {
return $match && ($value >= $numrooms);
},
TRUE
);
var_dump($valid);
答案 3 :(得分:1)
如果您可以在SQL级别执行此操作(如Andy建议的那样),那将是最佳选项。但是,如果你需要在PHP中执行此操作,则可以轻松地遍历数组,并在任何值低于允许的最小数量时将标志设置为false:
$minimum_val = 2;
$enough_rooms = true;
foreach($availresult as $item) {
if ($item < $minimum_val) {
$enough_rooms = false;
}
}
答案 4 :(得分:0)
感谢所有回答的人。我想我现在有了解决方案,而且我正在向前推进。圣诞快乐,全部。