Php 检查数组中有多少值大于x
在使用MySQL查询创建了一个值数组之后,我需要检查它们是否至少都等于给定的值。这是用来检查旅馆的房间是否有空的 首先,我执行MySQL查询:Php 检查数组中有多少值大于x,php,mysql,arrays,Php,Mysql,Arrays,在使用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' A
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,2,1,2,2,我需要返回false,但是如果它们是2,2,2,2或2,2,3,2,2,我需要返回true
我该怎么做?我希望我解释得足够好
显然,选择2只是一个例子。它通常是一个名为$numrooms的变量。在SQL代码中添加WHERE cupo>2。让数据库只提供您想要的结果,而不是自己检查结果以检查cupo>2
如果需要更改它,请使用参数化查询。有关详细信息,请参阅。如果您可以按照Andy的建议在SQL级别执行此操作,那么这将是最好的选择。但是,如果需要在PHP中执行此操作,则可以轻松地迭代数组,如果任何值低于允许的最小值,则将标志设置为false:
$minimum_val = 2;
$enough_rooms = true;
foreach($availresult as $item) {
if ($item < $minimum_val) {
$enough_rooms = false;
}
}
您应该将房间数作为一个条件传递给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";
因为数字1可能是您的PHP传递值
$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);
感谢所有回答的人。我想我现在有了解决办法,我正在努力。大家圣诞快乐。这非常需要一些。起初我认为这是我的解决方案,而且很简单!但是,在测试时,当查询生成非结果时,结果数组中会出现空值。因此,数组中的值的数量是相同的,这与练习的对象不符。但是谢谢你不厌其烦地查看并回答。这看起来很有希望,但我遇到了一个障碍。我已经创建了一个测试数组availresult=array[0]=>1[1]=>2[2]=>2[3]=>2[4]=>2[5]=>2。当我有$value>=2时,$valid为false,这就是我想要的。当我有一个$value>=1时,$valid为true,这也很好。但是当我有$value>=$numrooms和$numrooms=2时,$valid是真的!!!!!谢谢你,马克。我仍然不明白那里发生了什么,但它在我的小测试文件中工作得非常好。我现在将继续将其合并到真实页面中。这是38k的PHP代码,在整个过程中需要进行大量的修改,所以我需要一点时间。不过我很有信心现在一切都会好起来的。