2012-12-20 17 views
0

使用MySQL查询创建了一个值数组后,我需要检查它们是否都至少等于给定值。这是为了检查酒店的空房情况。检查数组中的多个值大于x

首先,我做了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,3,2,2,我需要返回true。

我该怎么做? (我希望我解释得很清楚。)

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

+0

这绝望地需要一些[正确的SQL转义](http://bobby-tables.com/php)。 – tadman

回答

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); 
+0

这看起来很有希望,但我碰到了一个障碍。我创建了一个测试数组availresult = Array([0] => 1 [1] => 2 [2] => 2 [3] => 2 [4] => 2 [5] => 2)。 当我有$ value> = 2时,$ valid是false,这是我想要的。 而当我的$ value> = 1时,$ valid为true,这也很好。 但是当我有$ value> = $ numrooms和$ numrooms = 2时,$ valid是真的!!!!! – TrapezeArtist

+0

谢谢马克。我仍然不明白那里发生了什么,但它在我的小测试文件中完美运行。我现在要继续将它合并到真实页面中。这就是38k的PHP代码,它有很多变化,所以它会花费我一点时间。不过,我非常有信心,现在一切正常。 – TrapezeArtist

4

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

如果需要能够更改它,请使用参数化查询。详情请参阅http://php.net/manual/en/security.database.sql-injection.php

+0

起初我以为这是我的解决方案,太简单了!然而,在测试它时,当查询产生一个非结果时,结果数组中会出现空值。因此,数组中的值的数量是相同的,这会破坏练习的对象。 但感谢您煞费苦心地查看并回答。 – TrapezeArtist

1

如果你可以在SQL级别做到这一点(如安迪的建议),这将是最好的选择。但是,如果你需要做这在PHP中,你可以很容易地在你的阵列迭代和标志设置为false,如果任何值是您允许的最低金额如下:

$minimum_val = 2; 
$enough_rooms = true; 
foreach($availresult as $item) { 
    if ($item < $minimum_val) { 
    $enough_rooms = false; 
    } 
} 
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传递值的数量。

0

谢谢大家谁回答。我想我现在有了我的解决方案,而且我正在向前迈进。圣诞快乐,全部。