PHP中的数组组合

时间:2017-04-12 06:20:25

标签: php arrays combinations

我正在尝试从数组生成所有组合,并且我有下面给出的数组,

$myArray = array('A','B','C');

生成像

这样的组合的最简单方法是什么
Array
(
    [0] => Array
        (
            [0] => A
            [1] => B
        )

    [1] => Array
        (
            [0] => B
            [1] => C
        )

    [2] => Array
        (
            [0] => A
            [1] => C
        )

    [3] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )
)

提前致谢

3 个答案:

答案 0 :(得分:0)

修改 下面的代码给出了你想要的结果(不仅仅是对于带有3个元素的数组,比如编辑asnwer之前的代码),但我怀疑它是最好的方法,但是由于没有人提供答案你可以使用它直到你找到一个更好的方式

$myArray = array('A','B','C','D');

$result=array_combinations($myArray);

print_r($result);

function array_combinations($array){

    $result=[];
    for ($i=0;$i<count($array)-1;$i++) {
       $result=array_merge($result,combinations(array_slice($array,$i)));    
    }

    return $result;
}

function combinations($array){
    //get all the possible combinations no dublicates
    $combinations=[];

    $combinations[]=$array;
    for($i=1;$i<count($array);$i++){
        $tmp=$array;

        unset($tmp[$i]);
        $tmp=array_values($tmp);//fix the indexes after unset
        if(count($tmp)<2){
            break;
        }
        $combinations[]=$tmp;
    }


    return $combinations;
}

<强>结果

Array
(
    [0] => Array
        (
            [0] => A
            [1] => B
            [2] => C
            [3] => D
        )

    [1] => Array
        (
            [0] => A
            [1] => C
            [2] => D
        )

    [2] => Array
        (
            [0] => A
            [1] => B
            [2] => D
        )

    [3] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

    [4] => Array
        (
            [0] => B
            [1] => C
            [2] => D
        )

    [5] => Array
        (
            [0] => B
            [1] => D
        )

    [6] => Array
        (
            [0] => B
            [1] => C
        )

    [7] => Array
        (
            [0] => C
            [1] => D
        )

)

您可以找到演示here

答案 1 :(得分:-1)

嗯,最简单的方法是在最后附加一个新的Subarray:

$myarray = array()
$myarray[] = array('A', 'B');
$myarray[] = array('C', 'D');

您可以根据需要使用任意数量的数组维度。但它很快变得难以理解和/或无法管理。考虑使用类来向其他程序员展示您对数据结构的意义。

正如你所说的组合数组,你也可以使用array_merge它取决于具体情况,哪个选项更好。

答案 2 :(得分:-2)

[{
        "created_at": "2017-03-14T01:00:32Z",
        "entry_id": 33358,
        "field1": "4",
        "field2": "4",
        "field3": "0"
 },
 {
        "created_at": "2017-03-14T22:54:43Z",
        "entry_id": 33398,
        "field1": "84",
        "field2": "32",
        "field3": "0"
 }];

问题类似点击How to compare one element from same table to another element已经问过。