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

时间:2012-12-20 22:40:17

标签: 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' 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的变量。

5 个答案:

答案 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)

感谢所有回答的人。我想我现在有了解决方案,而且我正在向前推进。圣诞快乐,全部。