这个PHP代码是如何工作的? (排列)

时间:2015-02-21 09:27:26

标签: php permutation

我看到了这个函数(Get all permutations of a PHP array?),但我无法理解其中一些编码是如何工作的,可以帮助解释一下吗?顺便说一句,我是php新手。
这是代码:

function pc_permute($items, $perms = array()) 
    {
        if (empty($items))
        { 
            echo join(' ', $perms) . "<br />";
        } 
        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);

为什么要使用list($foo)?我试图使用数组,它不起作用(我不明白列表)
为什么要使用array_unshift($newperms, $foo);?为了什么?对不起,我是php T.T的新手

1 个答案:

答案 0 :(得分:0)

List接受一个数组并将其放在变量中,如果数组大小为3,那么在list函数中你需要提到3个变量。

list($foo) = array_splice($newitems, $i, 1);

他所做的是将$i放入$foo并将其从数组中删除。 这看起来也像这样 -

$foo = array_splice($newitems, $i, 1)[0];

但有些人会认为这段代码更难阅读。

然后array_unshift($newperms, $foo)表示取$foo并将其放在$newperms数组的开头。所以如果数组看起来像

Array ( [0] => a [1] => b [2] => c )
运行该函数后,

$foo等于d数组看起来像这样 -

Array ( [0] => d [1] => a [2] => b [3] => c )