$str="L1B1,L1B2,L1B10,L1B3,L1B8,L2B1,L1B2,L3B10,L1B3,L1B4,L1B5,L1B10,L3B5,L1B2,L1B10,L1B3,L1B8,L2B1"; //字符串
$str_Array=array_unique(split(",",$str));//變為數組,去掉重復值
sort($str_Array);//按從小到大排列
for($i=0;$i<count($str_Array);$i++){
echo $str_Array[$i]."<br>";
}
///////////// 得到結果 ////////////
L1B10
L1B2
L1B3
L1B4
L1B5
L1B8
L2B1
L3B10
L3B5

但我希望得到的結果是:
L1B2
L1B3
L1B4
L1B5
L1B8
L1B10
L2B1
L3B5
L3B10請問該如何處理

解决方案 »

  1.   

    $str="L1B1,L1B2,L1B10,L1B3,L1B8,L2B1,L1B2,L3B10,L1B3,L1B4,L1B5,L1B10,L3B5,L1B2,L1B10,L1B3,L1B8";

    $str_Array=array_unique(split(",",$str));
    preg_match_all('#L(\d+)B(\d+)#',implode(',',$str_Array),$m);
    array_multisort($m[1],SORT_ASC,$m[2],SORT_ASC,$str_Array);
      

  2.   

    $str="L1B1,L1B2,L1B10,L1B3,L1B8,L2B1,L1B2,L3B10,L1B3,L1B4,L1B5,L1B10,L3B5,L1B2,L1B10,L1B3,L1B8,L2B1"; //字符串
    $str_Array=array_unique(split(",",$str));//變為數組,去掉重復值foreach($str_Array as $r) {
      list($t, $a[], $b[]) = preg_split('/[^\d]+/', $r);
    }
    array_multisort($a, $b, $str_Array);//sort($str_Array);//按從小到大排列
    for($i=0;$i<count($str_Array);$i++){
    echo $str_Array[$i]."<br>";
    }L1B1
    L1B2
    L1B3
    L1B4
    L1B5
    L1B8
    L1B10
    L2B1
    L3B5
    L3B10