我正在努力完成以下任务,但我似乎无法做到正确。即使我愿意,我也不认为我这样做是正确的。
假设我有这个数组:
$array = array(
array(1, 2, 3),
array(1, 2, 3),
array(1, 2, 3)
);
现在我想获得多维数组的所有排列,但每个'子数组'仍然必须有1,2和3.所以这些都可以:
$array = array(
array(2, 1, 3),
array(1, 2, 3),
array(1, 2, 3)
);
$array = array(
array(2, 3, 1),
array(1, 2, 3),
array(1, 2, 3)
);
但这不是:
$array = array(
array(3, 3, 3),
array(1, 2, 1),
array(1, 2, 2)
);
我已经尝试了很多,但我不断回头的是大量的for循环。这似乎不是实现这一目标的正确方法。
我希望有人可以提供帮助!
答案 0 :(得分:-1)
我没有得到你想要的东西 - 而且你无法清楚地表达你想要的东西......但这至少创造了你所给出的例子。
$array = array(
array(1, 2, 3),
array(1, 2, 3),
array(1, 2, 3)
);
foreach ($array AS $key => $values) {
shuffle($array[$key];
}
var_dump($array);
答案 1 :(得分:-2)
代码是:Get all permutations of a PHP array?
的修改版本如果您的集合始终具有三个不同的值,则可以使用三个嵌套for循环执行此操作。否则,如果您需要在可变大小的输入上执行此操作,则需要执行递归。此外,如果子数组始终包含相同的值,则它不必是多维的。像这样:
function getPerms($items, $perms = array(), &$return) {
if (empty($items)) {
$return[] = $perms;
}
else {
for ($i = count($items) - 1; $i >= 0; --$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
$this->pc_permute($newitems, $newperms, $return);
}
}
}
然后用:
来调用它$return = array();
getPerms(array(1,2,3), array(), $return);
$ return将包含这三个数字的所有排列。