Как передать группу массивов в функцию в переполнении стека

Я хочу запустить тест 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);

Данные для теста были получены из базы данных в следующем формате. Каждый подмассив представляет собой один набор данных в наборе 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 (Запуск одностороннего сценария Сципи в сценарии). Решение

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

Я надеюсь спросить, есть ли подобное решение в PHP.

Точно так же я пытался

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

Но это не работает.

Я также пытался использовать функцию call_user_func_array () в PHP

$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

Решение

Начиная с 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);
1

Другие решения

Других решений пока нет …