当前位置: 首页 > 面试题库 >

获取PHP数组的所有排列?

辛承
2023-03-14
问题内容

给定一个PHP字符串数组,例如:

['peter', 'paul', 'mary']

如何生成此数组元素的所有可能排列?即:

peter-paul-mary
peter-mary-paul
paul-peter-mary
paul-mary-peter
mary-peter-paul
mary-paul-peter

问题答案:

function pc_permute($items, $perms = array()) {
if (empty($items)) {
echo join(‘ ‘, $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);
pc_permute($newitems, $newperms);
}
}
}


$arr = array('peter', 'paul', 'mary');

pc_permute($arr);

要么

function pc_next_permutation($p, $size) {
    // slide down the array looking for where we're smaller than the next guy
    for ($i = $size - 1; $p[$i] >= $p[$i+1]; --$i) { }

    // if this doesn't occur, we've finished our permutations
    // the array is reversed: (1, 2, 3, 4) => (4, 3, 2, 1)
    if ($i == -1) { return false; }

    // slide down the array looking for a bigger number than what we found before
    for ($j = $size; $p[$j] <= $p[$i]; --$j) { }

    // swap them
    $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;

    // now reverse the elements in between by swapping the ends
    for (++$i, $j = $size; $i < $j; ++$i, --$j) {
         $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;
    }

    return $p;
}

$set = split(' ', 'she sells seashells'); // like array('she', 'sells', 'seashells')
$size = count($set) - 1;
$perm = range(0, $size);
$j = 0;

do { 
     foreach ($perm as $i) { $perms[$j][] = $set[$i]; }
} while ($perm = pc_next_permutation($perm, $size) and ++$j);

foreach ($perms as $p) {
    print join(' ', $p) . "\n";
}


 类似资料:
  • 我想获得表中所有的所有内部文本的数组。 以下工作 只是想知道在直接jQuery中是否有更好的方法(wo必须转换为数组,然后使用JS方法)

  • 我正在尝试编写一种方法来将数组置换为所有可能的排列。我将每个数组以ArrayList的形式,翻转两个元素,然后将ArrayList返回到ArrayList of ArrayList。如果我在翻转两个元素后将每个数组打印到屏幕上,则按预期进行打印。[1,2,3]前两个元素翻转打印为[2,1,3],但当我将置换的ArrayList添加到另一个ArrayList时,它们都打印为[1,2,3] 代码: 输

  • 我试图得到与输入arrayList相同长度的ArrayList的所有可能的排列。也就是说,1,2,3的ArrayList将导致123, 132, 213, 231, 321, 312,不包括1, 2, 12, 13等较短的排列。 坐标是一个类,它只有x、y和y,用于保存项目的二维点。 目前,我正在使用这段代码将其打印到控制台,但如果有人能告诉我如何将其存储到ArrayList中,我也将不胜感激

  • 问题内容: 我正在尝试获取与输入arrayList相同长度的ArrayList的所有可能排列。即1,2,3的ArrayList将导致123、132、213、231、321、312,不包括较短的排列(例如1,2,12、13等)。这是我到目前为止的代码: 坐标是一个只有x,y且访问了该项目以容纳项目的2D点的类。 当前,我正在使用此代码将其打印到控制台,但是如果有人可以阐明将其存储到ArrayList

  • 问题内容: 我有一个如下的JSON数组: 我不知道该数组中确实存在哪些键。我想从数组中获取所有现有键。 应该可能是这样的: 请告诉我获取Json数组中所有现有键的方法或方法。 问候 问题答案: 试试这个: 我还对您当前的代码进行了一些修改(例如缓存)。

  • 本文向大家介绍php求数组全排列,元素所有组合的方法总结,包括了php求数组全排列,元素所有组合的方法总结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php求数组全排列,元素所有组合的方法总结。 分享给大家供大家参考,具体如下: 以上这篇php求数组全排列,元素所有组合的方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。