-1

我正在尝试完成以下任务,但似乎无法正确完成。即使我愿意,我也不认为我的做法是正确的。

假设我有这个数组:

$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 循环。这似乎不是实现这一目标的正确方法。

我希望有人能帮帮忙!

4

2 回答 2

-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);
于 2013-09-22T11:37:57.917 回答
-2

代码是修改后的版本:获取 PHP 数组的所有排列?

如果你的集合总是有三个不同的值,你可以用三个嵌套的 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 将包含这三个数字的所有排列。

于 2013-09-21T18:11:07.670 回答