2014-11-04 68 views
2

我有这个疑问:PHP - 查找最大/最高值

$stmt=$dbh->prepare("select round((expire - unix_timestamp())/86400) as days, count(*) as cnt from xeon_users_rented WHERE user_by=:username group by days;"); 
    $stmt->bindParam(":username",$userdata['username']); 
    $stmt->execute(); 
    $data=$stmt->fetchAll(); 

它返回数组结果var_dump($data)

array(2) { 
    [0]=> 
    array(4) { 
    ["days"]=> 
    string(2) "27" 
    [0]=> 
    string(2) "27" 
    ["cnt"]=> 
    string(1) "2" 
    [1]=> 
    string(1) "2" 
    } 
    [1]=> 
    array(4) { 
    ["days"]=> 
    string(3) "116" 
    [0]=> 
    string(3) "116" 
    ["cnt"]=> 
    string(1) "8" 
    [1]=> 
    string(1) "8" 
    } 
} 

然后我想要得到的$data结果的最高值:

echo max($data["days"]);  

Althoug不起作用,因为没有什么会得到回应。 我在做什么错?

+0

如果downvoting(关闭),请给我一个理由如此友善。作为一名PHP初学者,我看不出有什么问题。 – oliverbj 2014-11-04 14:43:13

+3

'echo max(array_column($ data,'days'));'如果您使用的PHP> = 5.5 – 2014-11-04 14:44:22

+0

我正在使用PHP 5.3 – oliverbj 2014-11-04 14:45:42

回答

2

$data['days']不是数组。你有一个数组数组,每个数组都有它自己的'days'元素。

你可以映射你的“天”元素的数组,然后获得max()

echo max(array_map(function($d){ 
    return $d['days']; 
}, $data)); 

Demo

+0

我得到这个错误:未定义的索引:days – oliverbj 2014-11-04 14:44:44

+0

对不起,我忘记'array_map()'函数中的'return'。请现在尝试。 – George 2014-11-04 14:45:21

0

,我看到你的阵列是2维的,你需要通过双方的这种循环数组,然后从它们中获取最大值。

for($i=0;$i<=sizeof($data);$i++) { echo max($data[$i]["days"]); } 

这应该可以解决您的问题。

+0

这是不正确的,因为正如George所说的那样,'days'索引的值不是数组。这将当前为'$ data'数组的每个元素输出。 – Flosculus 2014-11-04 14:49:15

4

不会

SELECT MAX(column_name) FROM table_name; 

做,在查询了吗? 只选择最高值 - 为此节省带宽,并且不需要循环浪费更多资源。 所有钍我无法用您的具体查询来测试它。