[英]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.