1

我有一个函数可以找到数组的所有可能组合:

function combination($array) 
{    
    $results = array(array());

    foreach ($array as $element)
        foreach ($results as $combination)
            array_push($results, array_merge(array($element), $combination));

    return $results;
}

这将返回一个多维数组并且它可以工作。

如果我尝试打印数组,我使用这个:

foreach (combination($set)  as $combination)
{
    print join("\t", $combination) . "  - ";
}

为了:$set = array('s','f','g');

输出是:- s - f - f s - g - g s - g f - g f s -

现在我想不通的是如何根据长度对组合进行排序,从而使输出变为: - g f s - g s - g f - f s - g - s - f -

4

1 回答 1

3

为此,您需要使用“usort”:

function sortByLength($a, $b) {
    return count($b) - count($a);
}

$result = combination($set);

usort($result, 'sortByLength');

如果您只使用一次,您也可以只使用 'sortByLength' 作为匿名函数,而不是定义它:

$result = combination($set);

usort($result, function($a, $b) {
    return count($b) - count($a);
} );
于 2012-06-01T15:21:03.643 回答