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

kuuvgm7e  于 2022-12-28  发布在  PHP
关注(0)|答案(4)|浏览(156)

使用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。例如,如果范围中有5个日期,它们是2,2,1,2,2,我需要返回false,但如果它们是2,2,2,2,2或2,2,3,2,2,我需要返回true。
我该怎么做呢?(我希望我解释得足够好。)
显然,选择2只是一个例子,它通常是一个名为$numrooms的变量。

b0zn9rqh

b0zn9rqh1#

在SQL代码中添加一个WHERE cupo > 2,让数据库只给予你想要的结果,而不是自己检查结果是否cupo〉2。
如果你需要改变它,使用一个参数化的查询。详细信息请参见http://php.net/manual/en/security.database.sql-injection.php

wgx48brx

wgx48brx2#

$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);
kcugc4gi

kcugc4gi3#

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

z31licg0

z31licg04#

如果你能在SQL级别上完成这个操作(如Andy所建议的),那将是最好的选择。然而,如果你需要在PHP中完成这个操作,你可以很容易地迭代你的数组,并在任何值低于你允许的最小值时设置一个标志为false:

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

相关问题