如何将一组数组传递给 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);
我想 运行 在 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);