类型分为:AAAAA     AAAA     AAA     AABBCC     AABB     AAABBB     AABBB     AAABB     ABABAB     ABAB     AAAAB     升序ABCD     降序DCBA我通过文本(手机号一个一行)将一组手机号导入到数据库里,需写一个算法,可以得到手机号的类型如手机号(15836998812)这样的为AABB(因为有9988是AABB型的,只要是两个相同的连在一起就可以如1133也是AABB的),15836888812,这样的就是AAAA型的,一共分为
AAAAA型的(如:15836999992,判断依据:99999)
AAAA型的(如:158365111152,判断依据:1111)
AAA型的(如:15836222712,判断依据:222)
AABBCC型的(如:15877889912,判断依据:778899)
AABB型的(如:15866779912,判断依据:6677)
AAABBB型的(如:15811122212,判断依据:111222)
AABBB型的(如:15855666212,判断依据:55666)
AAABB型的(如:15811122712,判断依据:11122)
ABABAB型的(如:15823232312,判断依据:22323)
ABAB型的(如:15836368963,判断依据:3636)
AAAAB(如:15811112569,判断依据:11112)
升序ABCD(如:158123478963,判断依据:1234)
降序DCBA(如:15843215698,判断依据:4321)

解决方案 »

  1.   

    先给一个测试代码
    暂不处理升序降序的情况
    $ar = array(
    '15836999992',
    '158365111152',
    '15836222712',
    '15877889912',
    '15866779912',
    '15811122212',
    '15855666212',
    '15811122712',
    '15823232312',
    '15836368963',
    '15811112569',
    '158123478963',
    '15843215698',
    );
    $mode = array(
      'AAAAA' => '(\d)\\1{4}',
      'AAAA' => '(\d)\\1{3}',
      'AAA' => '(\d)\\1{2}',
      'AABBCC' => '(\d)\\1(\d)\\2(\d)\\3',
      'AABB' => '(\d)\\1(\d)\\2',
      'AAABBB' => '(\d)\\1{2}(\d)\\2{2}',
      'AABBB' => '(\d)\\1(\d)\\2{2}',
      'AAABB' => '(\d)\\1{2}(\d)\\2',
      'ABABAB' => '(\d)(\d)\\1\\2\\1\\2',
      'ABAB' => '(\d)(\d)\\1\\2',
      'AAAAB' => '(\d)\\1{3}\d',
    //  '升序ABCD' => '(\d)\\1{4}',
    //  '降序DCBA' => '(\d)\\1{4}',
    );foreach($ar as $tel) {
      foreach($mode as $m=>$p) {
        if($tel != preg_replace_callback("/$p/", 'back', $tel)) {
          $r[$tel][] = $m;
        }
      }
    }
    function back($r) {
      if(count($r) == 2 && strlen($r[0]) > 2) return '';
      if(count($r) == 3 && $r[1] == $r[2]-1) return '';
      if(count($r) == 4 && $r[1] == $r[2]-1 && $r[1] == $r[3]-2) return '';
      return $r[0];
    }
    print_r($r);Array
    (
        [15836999992] => Array
            (
                [0] => AAAAA
                [1] => AAAA
                [2] => AAA
                [3] => AAAAB
            )    [158365111152] => Array
            (
                [0] => AAAA
                [1] => AAA
                [2] => AAAAB
            )    [15836222712] => Array
            (
                [0] => AAA
            )    [15877889912] => Array
            (
                [0] => AABBCC
                [1] => AABB
            )    [15866779912] => Array
            (
                [0] => AABB
            )    [15811122212] => Array
            (
                [0] => AAA
                [1] => AABB
                [2] => AAABBB
                [3] => AABBB
                [4] => AAABB
            )    [15855666212] => Array
            (
                [0] => AAA
                [1] => AABB
                [2] => AABBB
            )    [15811122712] => Array
            (
                [0] => AAA
                [1] => AABB
                [2] => AAABB
            )    [15823232312] => Array
            (
                [0] => ABABAB
                [1] => ABAB
            )    [15811112569] => Array
            (
                [0] => AAAA
                [1] => AAA
                [2] => AAAAB
            ))
      

  2.   


    'AAAAA' => '(\d)\\1{4}' 这段正则是什么意思呢
      

  3.   

    本帖最后由 xuzuning 于 2012-10-30 16:12:31 编辑
      

  4.   

    尤其是back函数这块 没看懂
      

  5.   

    此算法有点问题啊  如果是一个  15877998917这样的 应该也是AABB型的 但是他并不能分析出来哎