如何将一组数组传递给PHP中的函数

时间:2017-08-04 03:27:11

标签: php arrays function statistics anova

我想在PHP中运行ANOVA测试。我用于此任务的库是markrogoyski / math-php(https://github.com/markrogoyski/math-php#statistics---anova)。方法如下所示。

use MathPHP\Statistics\ANOVA;

// One-way ANOVA
$sample1 = [1, 2, 3];
$sample2 = [3, 4, 5];
$sample3 = [5, 6, 7];
   ⋮            ⋮

$anova = ANOVA::oneWay($sample1, $sample2, $sample3);
print_r($anova);

以下列格式从数据库中检索测试数据。每个子数组是ANOVA集中的一个数据集(如$ sample1,$ sample2等)。问题是根据输入,子阵列的数量不固定。因此,我在查询过程中将它们全部添加到一个大数组中。

Array
(
[0] => Array
    (
        [0] => 14.60
        [1] => 15.94
    )

[1] => Array
    (
        [0] => 16.12
        [1] => 15.30
        [2] => 9.24
    )

[2] => Array
    (
        [0] => 6.80
        [1] => 15.78
    )
)

问题是ANOVA :: oneWay方法只接受逗号分隔的数组。当我简单地将上面的数组传递给函数时,

$anova = ANOVA::oneWay($TTFF_anova);

我收到以下错误。

Uncaught MathPHP\Exception\BadDataException: Must have at least three samples

我相信我需要将一组数组传递给该函数。

我在线搜索了可能的解决方案。这篇文章描述了Python中的类似问题(Running scipy's oneway anova in a script)。解决方案是

scipy.stats.f_oneway(*archive.values())

我希望问一下PHP中是否有类似的解决方案。

同样,我试过

$anova = ANOVA::oneWay(array_values($TTFF_anova));

但它不起作用。

我也尝试在PHP中使用call_user_func_array()函数

$anova = call_user_func_array('ANOVA::oneWay', $TTFF_anova);

我收到错误

Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'ANOVA' not found

请帮我解决这个问题。非常感谢你。

1 个答案:

答案 0 :(得分:2)

从PHP 5.6开始,使用splat运算符...解压缩参数:

$TTFF_anova = array($sample1, $sample2, $sample3);
$anova = ANOVA::oneWay(...$TTFF_anova);

call_user_func_array应该使用命名空间或使用__NAMESPACE__

$anova = call_user_func_array('MathPHP\Statistics\ANOVA\ANOVA::oneWay', $TTFF_anova);
$anova = call_user_func_array(array('MathPHP\Statistics\ANOVA\ANOVA', 'oneWay'), $TTFF_anova);