这几天一直在想这个问题:
例如七星彩的复式拆分:2*345*0589*13*78*26*89 拆分成每位是一位数如1*2*3*4*5*6*7 怎么拆
还有双色球的复式拆分:03*07*10*12*13*25*26*30*33|01*11*12 前面是蓝色球选六位 |后是红色球,选一位,怎么拆。
谢谢!

解决方案 »

  1.   

    <?php
    function combine(&$a,$idx){
    if($idx>=count($a)-1) 
    return $a[$idx];
    else{
    $low_b=combine($a,$idx+1);
    $b=array();
    foreach($a[$idx] as $ch){
    foreach($low_b as $low_arr){
    $b[]=array_merge(array($ch),is_array($low_arr)? $low_arr: array($low_arr));
    }
    }
    return $b;
    }
    }$arr=explode('*','2*345*0589*13*78*26*89');
    foreach ($arr as $val){
    $com[]=str_split($val,1);
    }
    $b=combine($com,0);
    print_r($b);
    <?php
    function combine(&$a,$idx){
    if($idx>=count($a)-1) 
    return $a[$idx];
    else{
    $low_b=combine($a,$idx+1);
    $b=array();
    foreach($a[$idx] as $ch){
    foreach($low_b as $low_arr){
    $b[]=array_merge(array($ch),is_array($low_arr)? $low_arr: array($low_arr));
    }
    }
    return $b;
    }
    }
    $arr=explode('|','03*07*10*12*13*25*26*30*33|01*11*12');
    $com[]=array($arr[0]);
    $com[]=explode('*',$arr[1]);$b=combine($com,0);
    print_r($b);
    函数是找来的,不知道上面是不是你要的效果
      

  2.   

    前面看错了题,整理了一下。坐等高人<?php
    function combine(&$a,$idx){
    if($idx>=count($a)-1) 
    return $a[$idx];
    else{
    $low_b=combine($a,$idx+1);
    $b=array();
    foreach($a[$idx] as $ch){
    foreach($low_b as $low_arr){
    $b[]=array_merge(array($ch),is_array($low_arr)? $low_arr: array($low_arr));
    }
    }
    return $b;
    }
    }
    //排列组合 $arr里取$m个
    function foo($arr,$m){
    $result = array();
    if ($m ==1)
    return $arr;
    if ($m == count($arr)){
    $result[] = implode(',' , $arr);
    return $result;

    $temp_firstelement = $arr[0];
    unset($arr[0]);
    $arr = array_values($arr);
    $temp_list1 = foo($arr, ($m-1));
        
        foreach ($temp_list1 as $s){
    $s = $temp_firstelement.','.$s;
    $result[] = $s;
    }
    unset($temp_list1);
    $temp_list2 = foo($arr, $m);
    foreach ($temp_list2 as $s){
    $result[] = $s;
    }    
    unset($temp_list2);
    return $result;
    }//双色球
    $arr1=explode('|','03*07*10*12*13*25*26*30*33|01*11*12');
    $blue=explode('*',$arr1[0]);
    $red=explode('*',$arr1[1]);
    $com1[]=foo($blue,6);
    $com1[]=foo($red,1);$b1=combine($com1,0);
    $b1=array_map(function($a){return implode('|',$a);},$b1);
    print_r($b1);//七星彩
    $arr2=explode('*','2*345*0589*13*78*26*89');
    foreach ($arr2 as $val){
        $com2[]=str_split($val,1);
    }
    $b2=combine($com2,0);
    $b2=array_map(function($a){return implode('*',$a);},$b2);
    print_r($b2);
      

  3.   

    你的结果是对的,不过combine这个函数我看不懂,你能写下注释吗?