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

标签 php arrays

这是我的第一个问题:)

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

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

例如,

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/

相关文章:

arrays - 使用 CSV 对象声明 Powershell 变量

javascript - 第二次单击时 jQuery 数组不会被删除

javascript - jQuery 部分数组匹配用户输入?

php - 加载类映射后 Composer 自动加载文件

php - 使用 Laravel 上传多张图片

php - 使用 dev>null & 运行 exec() 命令不起作用,但 dev>null 可以

Laravel 4 中的 php artisan 迁移错误 PDOException

javascript - 将 javascript 值插入表单字段

python - 加快滑动窗口平均计算

c - 用用户输入填充数组