PHP: 如何将数组值与动态数量的数组的数组值合并?
PHP: How can I merge array values with array values of dynamic amount of arrays?
我想将一个数组的每个数组值与另一个数组的每个数组值合并。像这样:
$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', 'd', 'e', 'f'], ['g', 'h'] ];
$result = array_cartesian_product(...$a);
print_r($result);
我想将一个数组的每个数组值与另一个数组的每个数组值合并。像这样:
$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', 'd', 'e', 'f'], ['g', 'h'] ];
$result = array_cartesian_product(...$a);
print_r($result);