2013-08-06 130 views
-1

如何找到最大值,具有最高值返回最高值的PHP

回到這裏只有一個號碼是我的代碼:

<?php 
foreach($graphData as $gt) { 
    echo $gt['pView'].','; 
} 
?> 

結果:

0,0,0,18,61,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 

IM嘗試一些像這樣

<?php 
    $str = ''; 
     foreach ($graphData as $gt){ 
      $str = array($gt['pView'],);} 
      $max =max($str); 
      if($max == 0){echo '20';} 
       else 
      {echo $max +20;} 
?> 

an d的結果始終是,但要求是106 + 20

我的代碼有什麼問題?

回答

1

嘗試這種情況:

$arr = array(); 
foreach ($graphData as $gt) { 
    array_push($arr, $gt['pView']); 
} 
$max = max($arr); 
if ($max === 0) { 
    $max = 20; 
} 
else { 
    $max += 20; 
} 
echo $max; 

如在PHP documentation for max()看到的,函數max可以接受的值的單個陣列作爲參數。如果是這樣的話,它會返回數組中最大的值。

+0

其背部'20202020202020202020202020202020202020202020202020202020202020' 和A10有錯誤PHP的警告:MAX():當只有一個指定參數,它必須是一個數組 –

+0

啊,我誤解你的格式。我編輯了我的答案,看看它現在是否有效。 – theftprevention

+0

是的,這工作正常... –

3

示例代碼存在嚴重問題。首先是縮進,固定之後,我們有

foreach ($graphData as $gt){ 
    $str = array($gt['pView'],); 
} 

這應該是顯而易見的,這將不會做任何事情,因爲它使復位$str陸續陣列中的一個值,而在此期間做別的(另外,爲什麼將一個數組賦值給一個名爲$str的變量?)。

的解決方案是迭代的簡單情況:

$max = reset($gt); 
foreach ($gt as $item) { 
    $max = max($item['pView'], $max); 
} 

echo "Final result = ".($max + 20); 

也有可愛的方式來寫這篇文章,例如

$max = max(array_map(function($item) { return $item['pView']; }, $gt)); 

,或者如果你正在使用PHP 5.5

$max = max(array_column($gt, 'pView')); 
+0

回想起來,這實際上是最好的答案。我很欣賞'array_map'和'array_column'的使用。 +1 – theftprevention

0

你可以做:

sort($grafdata); 
if($grafdata == 0) { 
    echo '20'; 
} else { 
    echo $grafdata + 20; 
}