2017-03-31 44 views
2

在下面function,當我打電話爲什麼這個模式函數返回null?

mmmr(array(1,2,3,3,4,3), 'mode', 'ceil'); // null 

返回null。如果我沒有設置第三個參數($round),可以正常工作。

mmmr(array(1,2,3,3,4,3), 'mode'); // 3 

我在想什麼?咖啡?

function mmmr(array $array, $output = 'mean', $round = false) { 

     switch($output) { 

       case 'mode': 

       if($round == "ceil") { 
        foreach($array as $key => $value) { 
         $array[$key] = ceil($value); 
        } 
       } elseif($round == "floor") { 
        foreach($array as $key => $value) { 
         $array[$key] = floor($value); 
        } 
       } elseif($round == "normal") { 
        foreach($array as $key => $value) { 
         $array[$key] = round($value); 
        } 
       } 

       $v = array_count_values($array); 
       arsort($v); 
       foreach($v as $k => $v) { 
        $total = $k; 
        break; 
       } 
       break; 


     } 

     return $total; 

    } 
+0

陣列array_count_values(數組$陣列)http://php.net/manual/en/function.array-count-values.php – themerlinproject

+1

或者說你傳遞它是一組浮標。它只能處理字符串和整型。警告:array_count_values():只能計算STRING和INTEGER值!在線25' Ceil返回一個浮動。 – mkaatman

+0

就是這樣。我只是用(int)類型化它,現在它工作正常。如果你想把它放在答案中,我會標記它是正確的,謝謝 – themerlinproject

回答

2

array_count_values()只能算STRINGINTEGER值。 ceil(),floor()round()返回一個浮點數。它鑄造於int解決您的問題:

<?php 

function mmmr(array $array, $output = 'mean', $round = false) { 

    switch($output) { 

      case 'mode': 

      if($round == "ceil") { 
       foreach($array as $key => $value) { 
        $array[$key] = (int) ceil($value); // (int) 
       } 
      } elseif($round == "floor") { 
       foreach($array as $key => $value) { 
        $array[$key] = (int) floor($value); // (int) 
       } 
      } elseif($round == "normal") { 
       foreach($array as $key => $value) { 
        $array[$key] = (int) round($value); // (int) 
       } 
      } 

      $v = array_count_values($array); 
      arsort($v); 
      foreach($v as $k => $v) { 
       $total = $k; 
       break; 
      } 
      break; 


    } 

    return $total; 

} 

echo mmmr(array(1,2,3,3,4,3), 'mode', 'ceil'); // Returns 3