PHP计算二维数组的每个排列
Posted
技术标签:
【中文标题】PHP计算二维数组的每个排列【英文标题】:PHP Calculate Every Permutation from 2D Array 【发布时间】:2015-01-15 00:28:52 【问题描述】:几天来,我一直在寻找和挠头,我被困在一块石头和一个坚硬的地方之间。在我之前的所有代码运行之后,我只剩下这个数组:
Array (
[0] => Array
(
[0] => 1
[1] => 3
)
[1] => Array
(
[0] => 6
[1] => 7
[2] => 8
)
[2] => Array
(
[0] => 9
[1] => 10
)
)
我需要做的是计算所有键的所有可能排列。
所需的输出需要可以作为单个记录轻松插入,或者最好是批量插入到 sql 数据库中。
在我四处寻找之后,我尝试了无数的例子。我得到的最接近的是使用 Implode 函数,但这仍然不起作用。
非常感谢任何帮助!
--编辑--
这是返回数组的外观示例:
Array
(
[0] => 1,6,9
[1] => 1,6,10
[2] => 3,6,9
[3] => 3,6,10
[4] => 1,7,9
[5] => 1,7,10
[6] => 3,7,9,
[7] => 3,7,10
)
这不是所有排列,但应该让您了解我需要实现的目标。
【问题讨论】:
您要切换尺寸吗?我的意思是第三维的值可以用在第一个等等? @Cheery 让这段代码正常工作对我来说更重要。我可以根据返回的输出格式将插入重新写入数据库。谢谢 【参考方案1】:您要执行的操作在以下公式中定义:
它可能会这样做,它被称为笛卡尔积:
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;
$count = cartesian(
Array(1,3),
Array(6,7,8),
Array(9,10)
);
print_r($count);
【讨论】:
太不可思议了!谢谢!最后一个问题,是否可以在 "$count = printer(" If my original array = "$total" 我可以使用.. "$count = printer($total);" 中使用动态数组 我可以将我的数组转换为您使用的索引数组,但是我可能有多个数组。这需要是动态的。我尝试使用 foreach 循环将每个数组添加为索引数组,但这不起作用。任何帮助将不胜感激! :) @NicholasMordecai 你所说的动态是什么意思?如果使用 3d、4d 或 5d 数组,最终可能会减少到简单数组的数量。 @NicholasMordecai 先告诉我,你的代码真的那么复杂,你有 3d、4d 等数组吗?或者它可能需要重构?我问是因为在那个阶段事情会变得非常非常困难:) 它“应该”总是 2d 但是我不知道会有多少索引有时我可能会通过 $total[0],$total[1] 而其他时候我可能需要通过 $total[0],$total[1],$total[2],$total[3]。然而,问题是 cartesain 函数不接受关联数组,而只接受索引数组,因此 array(1,2,3) 可以工作,但 array[0] 不会。任何帮助将不胜感激。谢谢,尼克以上是关于PHP计算二维数组的每个排列的主要内容,如果未能解决你的问题,请参考以下文章