Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数组中有多少值大于x_Php_Mysql_Arrays - Fatal编程技术网

Php 检查数组中有多少值大于x

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

在使用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,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代码,在整个过程中需要进行大量的修改,所以我需要一点时间。不过我很有信心现在一切都会好起来的。