Мне нужно передать несколько массивов в индексированном формате в функцию cartesain, чтобы вычислить каждую перестановку. Это работает, когда код:
$count = cartesian(
Array("GH20"),
Array(1,3),
Array(6,7,8),
Array(9,10)
);
Я не всегда буду знать длину, количество массивов или значений, поэтому они хранятся в другом массиве «$ total», который может выглядеть примерно так:
Array (
[0] => Array
(
[0] => 1
[1] => 3
)
[1] => Array
(
[0] => 6
[1] => 7
[2] => 8
)
[2] => Array
(
[0] => 9
[1] => 10
)
)
Я попытался реализовать user_call_back_function согласно:
$count = call_user_func('cartesian', array($total));
Однако передаваемый массив выглядит так:
Array (
[0] => Array (
[0] => Array (
[0] => Array (
[0] => 1
[1] => 3
[2] => 4
)
[1] => Array (
[0] => 5
[1] => 6
[2] => 7
[3] => 8
)
[2] => Array (
[0] => 9
[1] => 10
)
)
)
)
Где я ошибаюсь, почему массив скрывается дальше в измерениях, где он не нужен, и это причина, по которой моя функция cartesain больше не работает?
Спасибо ник
Как и просили, вот моя функция cartesain:
function cartesian() {
$_ = func_get_args();
if(count($_) == 0)
return array(array());
$a = array_shift($_);
$c = call_user_func_array(__FUNCTION__, $_);
$r = array();
foreach($a as $v)
foreach($c as $p)
$r[] = array_merge(array($v), $p);
return $r;
}
почему массив спрятан ниже в размерах, где он не нужен?
Просто потому, что вы оборачиваете массив в другой массив при вызове call_user_func
,
$count = call_user_func('cartesian', array($total));
Возможно, вы имели в виду это:
$count = call_user_func('cartesian', $total);
это причина, почему моя функция cartesain больше не работает?
Я не знаю, вы не разместили свой cartesain
Аррат называется cartesain
РЕДАКТИРОВАТЬ как оп обновил вопрос.
Если вы используете PHP 5.6, вы сможете использовать оператор сплат.
call_user_func("cartesain", ...$total);
Отказ от ответственности, я не проверял это.
Массивы и объекты Traversable могут быть распакованы в списки аргументов при вызове функций с помощью оператора ….
Других решений пока нет …