像这样的数组
Array
(
[0] => Array
(
[0] => 1101
[3] => 1102
)
[1] => Array
(
[0] => 3304
[1] => 3305
)
[2] => Array
(
[0] => 4408
[2] => 4409
[5] => 4412
)
[3] => Array
(
[0] => 1111
[1] => 6666
)
)
排列成下面这样的效果:
Array
(
[0] => 1101:3304:4408:1111
[1] => 1101:3304:4408:6666
[2] => 1101:3304:4409:1111
[3] => 1101:3304:4409:6666
[4] => 1101:3304:4412:1111
[5] => 1101:3304:4412:6666
[6] => 1101:3305:4408:1111
[7] => 1101:3305:4408:6666
[8] => 1101:3305:4409:1111
[9] => 1101:3305:4409:6666
[10] => 1101:3305:4412:1111
[11] => 1101:3305:4412:6666
[12] => 1102:3304:4408:1111
[13] => 1102:3304:4408:6666
[14] => 1102:3304:4409:1111
[15] => 1102:3304:4409:6666
[16] => 1102:3304:4412:1111
[17] => 1102:3304:4412:6666
[18] => 1102:3305:4408:1111
[19] => 1102:3305:4408:6666
[20] => 1102:3305:4409:1111
[21] => 1102:3305:4409:6666
[22] => 1102:3305:4412:1111
[23] => 1102:3305:4412:6666
)
直接上代码吧:
//组合函数
function zuhe($arr, $cnt)
{
if ($cnt == 1) {
return $arr[0];
}
$dataArr = $arr;
unset($dataArr[0]);
$newdata = [];
$cnt2 = count($arr);
$ret = zuhe(array_values($dataArr), ($cnt - 1));
foreach ($arr[$cnt2 - $cnt] as $alv) {
foreach ($ret as $rv) {
if (is_array($rv)) {
array_unshift($rv, $alv);
$newdata[] = array_values($rv);
} else {
$newdata[] = [$alv,$rv];
}
}
}
return $newdata;
}
//$arc 是一个二维数组
foreach ($arc as $k=>&$v){
$v = array_unique($v); //如果数组中有重复,可以先去重;
}
$cnt = count($arc); //数组长度
$resu = zuhe($arc, $cnt);
foreach ($resu as &$av) {
$av = implode(':', $av); //以什么排列组合
}
$resu = array_merge(array_unique($resu)); //去重并重新定义键值
//打印效果
echo '<pre style="padding: 5px;border-radius: 4px;background: #ddd;border: 1px solid #ccc">';
print_r($resu);
echo '</pre>';die();

本文介绍了一种使用PHP实现的数组组合算法,通过递归函数实现多维数组元素的全排列组合,适用于需要对多组数据进行交叉匹配的场景。

8106

被折叠的 条评论
为什么被折叠?



