您的位置:

php组合数组,Php数组合并

本文目录一览:

高分求解PHP数组组合问题,给个思路就行。

下面是我写的用递归实现组合的小程序:

?php

function com($line, $x){

if (count($x)==1) echo "$line $x[0]\n";

else {

$y=array_pop($x);

com($line.' '.$y, $x);

com($line, $x);

com($line, array($y));

}

}

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

com('', $a);

?

由于程序是用\n换行,请在命令行下执行,我执行的结果如下:

E:\ygbphp a.php

D C B A

D C A

D C B

D B A

D A

D B

D C

C B A

C A

C B

B A

A

B

C

D

你如果要做新的数组,把里面的echo语句处理一下即可,注意新数组可以使用全局变量。

php怎么将两个数组合成一个数组?

PHP 中的 array_merge()、array_merge_recursive()函数可以实现

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。

注意:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

array_merge(array1,array2,array3...)

参数说明

array1 必需。输入的第一个数组。

array2 必需。输入的第二个数组。

array3 可选。可指定的多个输入数组。

例如:

?php

$a1=array("a"="Horse","b"="Dog");

$a2=array("c"="Cow","b"="Cat");

print_r(array_merge($a1,$a2));

?

输出:

Array ( [a] = Horse [b] = Cat [c] = Cow )

仅使用一个数组参数:

?php

$a=array(3="Horse",4="Dog");

print_r(array_merge($a));

?

输出:

Array ( [0] = Horse [1] = Dog )

array_merge_recursive() 函数与array_merge()函数不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。

例如:

?php

$a1=array("a"="Horse","b"="Dog");

$a2=array("c"="Cow","b"="Cat");

print_r(array_merge_recursive($a1,$a2));

?

输出:

Array (

[a] = Horse

[b] = Array ( [0] = Dog [1] = Cat )

[c] = Cow

)

PHP 多个数组的排列组合

$a = array(1,2,3,4,5,6,7);

$b = array(1,2,3);

$c = array(1,2,3,4,5,6,7,8,9,10);

$d = array($a,$b,$c);

//计算每一个数组的长度

$len = 1;

$arrLen = count($d); //需要排列数组有多少个

$recIndex = null; //记录当前该取的位置

//foreach 计数

$count_3 = 0;

foreach ($d as $key = $value) {

$lenRec[$count_3] = count($value);

$len = $lenRec[$count_3]*$len;

$recIndex[] = 0;//第一次全部取第0个

$count_3++;

}

//算出% 的值

$count = 1;

foreach ($lenRec as $key = $value) {

$moduloVal = 1;

if($arrLen == $count){

$modulo[] = count($d[$arrLen-1]); //等于最后一个的长度

}else{

$count_1 = 1;

foreach ($lenRec as $index = $item) {

$count_1 $count $moduloVal = $moduloVal*$item;

$count_1 ++;

}

$modulo[] = $moduloVal;

}

$count ++;//为了防止$d key是有值的 不是自然序列 需要计数

}

$i = 1;

while ( $i = $len) {

$html = '';

$count_2 = 0;// 取模

$temp = '';

foreach ($d as $value) {

$html .= $value[$recIndex[$count_2]%$lenRec[$count_2]].",";

$count_2 ++;

}

echo $html."br";

foreach ($modulo as $key = $value) {

if($i%$value == 0 $key $arrLen - 1 ){

$recIndex[$key] = $recIndex[$key] +1;

}

if($key == $arrLen - 1){

if($i%$value == 0){

$recIndex[$key] = 0;

}else{

$recIndex[$key] = $recIndex[$key] +1;

}

}

}

$i ++;

//改变获取的位置

}

PHP 递归处理数组,并组合成新的数组

/**

 * 多维数组递归合并

 */

function multimerge(){

    $arrs = func_get_args();

    $merged = array();

    while($arrs){

        $array = array_shift($arrs);

        if(!$array){

            continue;

        }

        foreach ($array as $key = $value){

            if (is_string($key)){

                if (is_array($value)  array_key_exists($key, $merged)  is_array($merged[$key])){

                     $merged[$key] = call_user_func(__FUNCTION__, $merged[$key], $value);

                }else{

                     $merged[$key] = $value;

                }

            }else{

                    $merged[] = $value;

            }

        }

    }

    return $merged;

}

$a1 = array('user' = array('name' = 'tony', 'score' = 23));

$a2 = array('user' = array('name' = 'tony', 'score' = 255), 'name' ='tom');

$a3 = array('user' = array('name' = 'tony', 'score' = 288, 'test' = 'abc'), 'name' ='jack');

$result= multimerge($a1, $a2, $a3);

var_dump($result);

php里面如何合并数组?

简单的方法是使用函数array_merge(),比如array_merge($arr_one,$arr_two );

或者forech方法

forech($arr_one as $v){

$arr_two[]=$v;

}

执行后数组one的元素全部添加到数组two中了

php实现全组合算法

?php

/**

* 在数组$a中任意m个元素组合

*

* @param array $a 候选的集合

* @param int $n 候选的集合大小

* @param int $m 组合元素大小

* @param array $b 储存当前组合中的元素,这里储存的是元素键值

* @param int $M 相当一个常量,一直保持不变

* @return */

function combine($a,$n,$m,$b,$M){

for($i=$n;$i=$m;$i--){

$b[$m-1]=$i-1;

if($m 1){

$combine[]=combine($a,$i-1,$m-1,$b,$M);

}else{

$onecombine='';

for($j=$M-1;$j=0;$j--){

$onecombine.=$a[$b[$j]];

}

$combine[]=$onecombine;

$onecombine='';

}

}

return $combine;

}

/**

* 递归输出数组

*

* @param array $arr 待输出的数组

* @return int 返回数组元素个数*/

function recursionarray($arr){

$i=0;

foreach($arr as $value){

if(is_array($value)){

$i+=recursionarray($value);

}else{

echo $value."br/";

$i++;

}

}

return $i;

}

$a=array('A','B','C','D','E','F','G','H','I','J');

$b=array();

$combine=combine($a,10,5,$b,5);

$count=recursionarray($combine);

echo "总共有".$count."组合";

?