微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP:如何将数组值与动态数组数量的数组值合并?

如何解决PHP:如何将数组值与动态数组数量的数组值合并?

我想将一个数组的每个数组值与另一个数组的每个数组值合并。像这样:

$a1 = ['a','b'];
$a2 = ['c','d','e','f'];
$a3 = ['g','h'];
$result = [];

foreach($a1 as $a) {
    foreach($a2 as $b) {
        foreach($a3 as $c) {
            $result[] = [$a,$b,$c];
        }
    }
}

结果应该是这样的:

array(16) {
  [0]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "c"
    [2]=>
    string(1) "g"
  }
  [1]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "c"
    [2]=>
    string(1) "h"
  }
  .... 
}

但我不知道如何动态地做到这一点,因为数组的数量(例如 $a1 - $a3)也应该是动态的。这样我也可以合并例如 $a1 - $a6 或 $a1 - $a2。

我希望有人能帮助我。 :)

解决方法

对可变数量数组的笛卡尔积使用以下递归函数:

function array_cartesian_product(...$array)
{
    if (empty($array)) return [[]];

    $column = array_shift($array);
    $cartesian = array_cartesian_product(...$array);

    $result = [];
    foreach ($column as $item) {
        foreach ($cartesian as $row) {
            array_unshift($row,$item);
            array_push($result,$row);
        }
    }
    return $result;        
}

// Usage:

$a1 = ['a','b'];
$a2 = ['c','d','e','f'];
$a3 = ['g','h'];

$result = array_cartesian_product($a1,$a2,$a3);

print_r($result);

$a = [ ['a','b'],['c','f'],['g','h'] ];

$result = array_cartesian_product(...$a);

print_r($result);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。