gpt4 book ai didi

php - 如何生成多个数组中元素的组合?

转载 作者:可可西里 更新时间:2023-11-01 13:37:23 26 4
gpt4 key购买 nike

这是我的第一个问题:)

我有一个包含多个子数组的数组,每个子数组都有唯一的值,我想获得这些值的所有可能的唯一组合。

数组的数量是已知的,但可能会随时间变化。

例如,

array(
[0] => array([0]=>'blue',[1]=>'red'),
[1] => array([0]=>'sunny',[1]=>'cloudy'),
[2] => array([0]=>'sweet',[1]=>'acid');

我应该怎么做才能得到:

array(
[0] => array([0]=>'blue',[1]=>'sunny',[2]=>'sweet'),
[1] => array([0]=>'blue',[1]=>'sunny',[2]=>'acid'),
[2] => array([0]=>'blue',[1]=>'cloudy',[2]=>'sweet'),
[3] => array([0]=>'blue',[1]=>'cloudy',[2]=>'acid'),
[4] => array([0]=>'red',[1]=>'sunny',[2]=>'sweet'),
[5] => array([0]=>'red',[1]=>'sunny',[2]=>'acid'),
[6] => array([0]=>'red',[1]=>'cloudy',[2]=>'sweet'),
[7] => array([0]=>'red',[1]=>'cloudy',[2]=>'acid'));

我试过用嵌套循环来做,但我的逻辑不太强。

非常感谢如果有人能阐明一些问题

最佳答案

(注意:需要稍作修改才能在 PHP < 5.3 中使用)

这样做(example 在在线解释器上):

$f = function () { return func_get_args(); };
$res = array_outer($f,
array("blue", "red"),
array("sunny", "cloudy"),
array("sweet", "acid"));

函数 array_outer,灵感来自 Mathematica 的 Outer , 这是:

/**
* A generalization of the outer product, forming all the possible
* combinations of the elements of any number of arrays and feeding
* them to $f.
* The keys are disregarded
**/
function array_outer($f, array $array1) {
$res = array();
$arrays = func_get_args();
array_shift($arrays);
foreach ($arrays as $a) {
if (empty($a))
return $res;
}

$num_arrays = count($arrays);
$pos = array_fill(0, $num_arrays, 0);
while (true) {
$cur = array();
for ($i = 0; $i < $num_arrays; $i++) {
$cur[] = $arrays[$i][$pos[$i]];
}
$res[] = call_user_func_array($f, $cur);
for ($i = $num_arrays-1; $i >= 0; $i--) {
if ($pos[$i] < count($arrays[$i]) - 1) {
$pos[$i]++;
break;
} else {
if ($i == 0)
break 2;
$pos[$i] = 0;
}
}
}
return $res;
}

关于php - 如何生成多个数组中元素的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com