本文目錄一覽:
- 1、高分求解PHP數組組合問題,給個思路就行。
- 2、php怎麼將兩個數組合成一個數組?
- 3、PHP 多個數組的排列組合
- 4、PHP 遞歸處理數組,並組合成新的數組
- 5、php裡面如何合併數組?
- 6、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.”組合”;
?
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/258397.html