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

How to pass a group of arrays to a function in PHP

我想 运行 在 PHP 中进行方差分析测试。我用于此任务的库是 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);

测试数据以下列格式从数据库中检索。每个子数组是方差分析集中的一个数据集(如 $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

我认为我需要将一组数组传递给该函数。

我在网上搜索了可能的解决方案。此 post 描述了 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

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

从 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);