PHP标准偏差。在类函数中找不到Array_map函数

时间:2013-12-09 17:05:50

标签: php callback standard-deviation array-map

我试图用PHP执行标准偏差。

我使用此功能创建了there,因为stats_standard_deviation doesn't seem to be reliable

    <?php 
    class TestController extends \BaseController {

         function MyFunction() {
             $array = array('1','2','3','4');
             function sd_square($x, $mean) { return pow($x - $mean,2); } 

             function sd($array) { 
                      return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) ); 
             } 
    } return sd($array)
} ?> 

问题在于,当我尝试使用它时,它会返回array_map() expects parameter 1 to be a valid callback, function 'sd_square' not found or invalid function name

在这里查看一些帖子,我尝试更改"sd_square""self::sd_square"的{​​{1}}。

1 个答案:

答案 0 :(得分:1)

这种方式可以回避这个问题(你应该解决它),但sq_square足够小,你可能只想考虑内联

变化:

return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );

要:

return sqrt(array_sum(array_map(function ($x, $mean) { return pow($x - $mean,2); }, $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );

或者:

$sd_square = function ($x, $mean) { return pow($x - $mean,2); };
return sqrt(array_sum(array_map($sd_square, $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );