簡體   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