2017-03-31 3 views
2

Im unten function, wenn ichWarum gibt diese Modusfunktion null zurück?

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

es null zurückrufen. Funktioniert gut, wenn ich das dritte ($round) Argument nicht einstelle.

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

Was fehlt mir? Kaffee?

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 array_count_values ​​(array $ array) http://php.net/manual/en/function.array-count-values.php – themerlinproject

+1

Oder besser gesagt Sie vorbei Es ist eine Reihe von Schwimmern. Es kann nur mit String und int umgehen. 'Warnung: array_count_values ​​(): Kann nur STRING- und INTEGER-Werte zählen! In Zeile 25 gibt Ceil einen Float zurück. – mkaatman

+0

das war es. Ich tippe es einfach mit (int) und jetzt funktioniert es gut. Wenn Sie das in eine Antwort setzen wollen, werde ich es richtig markieren, danke – themerlinproject

Antwort

2

array_count_values() nur STRING und INTEGER Werte zählen. ceil(), floor() und round() geben einen Float zurück. Casting es zu einem int behebt das Problem:

<?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 
Verwandte Themen