例如:a001d001,s002f00d001,a001d002,s002f00d002,a001d003,a001d004,s002f00d003
通过算法能将以上字符序列分成两个序列:
a001d001,a001d002,a001d003,a001d004 

s002f00d001,s002f00d002,s002f00d003相似字符之间变化的部分都在最后3-4位的流水号,流水号的出现不一定从1开始,也不一定连续;流水号的长度可能是三位或四位,相似字符串之间的流水号部分长度是相同的

解决方案 »

  1.   

    $arr = array('a001d001', 's002f00d001', 'a001d002', 's002f00d002', 'a001d003', 'a001d004', 's002f00d003');
    $array = array();
    foreach($arr AS $v)
    {
    $array[substr($v, 0, 4)][] = $v;//下标可以根据情况调整,符合某种格式,截取某一段即可
    }
    print_r($array);
      

  2.   

    我上面可能理解错了$arr = array('a001d001', 's002f00d001', 'a001d002', 's002f00d002', 'a001d003', 'a001d004', 's002f00d003');
    $array = array();foreach($arr AS $v)
    {
    $array[preg_replace('/(\w+[a-zA-Z])(\d+)/', "\$1", $v)][] = $v;
    //是不是流水号是纯数字组成,前面的部分,最后一位是字母???
    //这样能满足要求么?
    }
      

  3.   

    $ar = array('a001d001', 's002f00d001', 'a001d002', 's002f00d002', 'a001d003', 'a001d004', 's002f00d003');$r = array();preg_replace("/(\w+)(\d{3,4})/e", '$r[$1][]="$1$2"', $ar);
    print_r($r);
    结果:
    Array
    (
        [a001d] => Array
            (
                [0] => a001d001
                [1] => a001d002
                [2] => a001d003
                [3] => a001d004
            )    [s002f00d] => Array
            (
                [0] => s002f00d001
                [1] => s002f00d002
                [2] => s002f00d003
            ))