数据的排列组合二


直接贴代码:

$arr = Array(1,2,3,4,5,6,7,8,9);
foreach($arr as $v) echo str_repeat($v, 6), PHP_EOL;


$arr = Array(1,2,3,4,5,6,7,8,9);
for($i=0; $i<=count($arr)-6; $i++) {
  $t = array_slice($arr, $i, 6);
  echo join('', $t), PHP_EOL;
  echo join('', array_reverse($t)), PHP_EOL;
}
123456
654321
234567
765432
345678
876543
456789
987654



思路 其实也不难,谢谢论坛大牛的提示

首先考虑到: 六位重复性:

这是单纯数字方面

2 + 6  两位随机   6位重复    下面的也一样

6+  2

1+6 +1 

这是针对字母

2 +6

6+2

1 +6 +1

$arr_en = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '0', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',);

$arr_mer = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '0', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',);

$arr_num = Array(1, 2, 3, 4, 5, 6, 7, 8, 9);

第一步 把: 字母跟数字并在一起  $arr_mer

先写个:数字加字母一起 无重复排序: (只是两位无重复的,要是多位自己可以修改,这个网上也有的,仅参考)

//***********************************

//以下无重复排序
//$arr = array('a','b','c','d');
$arr = $arr_mer;
$result = array();
$t = getCombinationToString($arr, 2);
//print_r($t);

function getCombinationToString($arr, $m) {
    if ($m ==1) {
        return $arr;
    }
    $result = array();

    $tmpArr = $arr;
    unset($tmpArr[0]);
    for($i=0;$i<count($arr);$i++) {
        $s = $arr[$i];
        $ret = getCombinationToString(array_values($tmpArr), ($m-1), $result);

        foreach($ret as $row) {
            $result[] = $s . $row;
        }
    }

    return $result;
}
//*******************************************************


然后写个小循环:、 这里只是写了: 6 +2  相应的 还要写: 2+6     1+6+1  相应规则     还有字母 规则 也要写

/*$i= 0;
$j = 0;
foreach($arr_num as $en) {
$i++;
    foreach ($t as $v) {
         //echo (str_repeat($en, 6)).$v, PHP_EOL;
           $j++;
        $code = $v.(str_repeat($en, 6)).$v;
        echo $code;

        $sql = "INSERT INTO  table_name (uid, code, up_time, add_time)VALUES(0,'$code','$up_time','$add_time')";

        if (!mysql_query($sql, $conn)) {
            echo "添加数据失败:" . mysql_error();
        } else {
            echo "添加数据成功!",PHP_EOL;
        }
        echo "共".$j."个";
    }

    echo "共".$i."个";
}*/


下面是字母的规则:

/*$i= 0;
$j = 0;
foreach($arr_en as $en) {
    $i++;
    foreach ($t as $v) {
        //echo (str_repeat($en, 6)).$v, PHP_EOL;
        $j++;
        $code = (str_repeat($en, 6)).$v;
        echo $code;

        $sql = "INSERT INTO table_name (uid, code, up_time, add_time)VALUES(0,'$code','$up_time','$add_time')";

        if (!mysql_query($sql, $conn)) {
            echo "添加数据失败:" . mysql_error();
        } else {
            echo "添加数据成功!",PHP_EOL;
        }
        echo "共".$j."个";
    }

    echo "共".$i."个";
}*/


备注: 如果 还有其他规则 也按照此类方法推理: 如果需要连续多少位数字一起 2+ 六位连续 六位连续+2 1+六位连续 +1

$arr  = Array(1,2,3,4,5,6,7,8,9);
for ( $i =0;  $i <= count ( $arr )-6;  $i ++) {
   $t  array_slice ( $arr $i , 6);
   echo  join( '' $t ), PHP_EOL;
   echo  join( '' array_reverse ( $t )), PHP_EOL;
}
123456
654321
234567
765432
345678
876543
456789
987654


希望能用到的 提供思路帮助 。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值