繁体   English   中英

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

[英]Checking How Many Values in an Array are Greater than x

使用 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, 2, 3, 2, 2,我需要返回 true。

我怎么做? (我希望我解释得足够好。)

显然选择2只是一个例子。 它通常是一个名为 $numrooms 的变量。

WHERE cupo > 2添加到您的SQL代码中。 让数据库只给您想要的结果,而不是遍历结果自己检查cupo> 2。

如果需要更改它,请使用参数化查询。 有关详细信息,请参见http://php.net/manual/en/security.database.sql-injection.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);

您应将房间数作为条件传递给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传递的值。

如果可以在SQL级别上执行此操作(如Andy建议的那样),那将是最佳选择 但是,如果需要使用PHP进行此操作,则可以轻松地遍历数组,如果任何值低于允许的最小值,则将标志设置为false:

$minimum_val = 2;
$enough_rooms = true;
foreach($availresult as $item) {
  if ($item < $minimum_val) {
    $enough_rooms = false;
  }
}

感谢所有回答。 我想我现在有解决方案,并且我一直在努力。 祝大家圣诞节快乐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM