对一个数组进行排序,例如 
$arr=array(
'Acer TravelMate 220', 
'Acer TravelMate 2200',
'Acer TravelMate 222',
'Acer TravelMate 223',
'Acer TravelMate 225',
'Acer TravelMate 230',
'Acer TravelMate 2300',
'Acer TravelMate 2301' 
'Acer Aspire 1810 Timeline',
'Acer Aspire 18100 Timeline',
'Acer Aspire 1810T Timeline',
'Acer Aspire 1810TZ Timeline',
'Acer Aspire 1820P Timeline',
'Acer Aspire 18200P Timeline'
'Acer Aspire 1821P Timeline',
'Acer Aspire 1830T TimelineX',
'Acer Aspire 3410T Timeline',
'Acer Aspire 3810T Timeline');对这个数组进行排序, "这还不容易",某些同志先不要激动,听我慢慢说;
要求排序的结果是按类别排序,比如 1810的是一个类别,同一个类别再按照数字大小排序,那么1810所排的结果如下:
...
'Acer Aspire 1810 Timeline',
'Acer Aspire 1810T Timeline',
'Acer Aspire 1810TZ Timeline',//这里注意,同一大小数字按照数字后面的字母类别排序,同时数字后面的字母由少到多排序
'Acer Aspire 18100 Timeline',
...
以此类推,就是按照同类别的大小长短排序!
有劳各位了!

解决方案 »

  1.   

    对一个数组进行排序,例如  
    $arr=array(
    'Acer TravelMate 220',  
    'Acer TravelMate 2200',
    'Acer TravelMate 222',
    'Acer TravelMate 223',
    'Acer TravelMate 225',
    'Acer TravelMate 230',
    'Acer TravelMate 2300',
    'Acer TravelMate 2301'  
    'Acer Aspire 1810 Timeline',
    'Acer Aspire 18100 Timeline',
    'Acer Aspire 1810T Timeline',
    'Acer Aspire 1810TZ Timeline',
    'Acer Aspire 1820P Timeline',
    'Acer Aspire 18200P Timeline'
    'Acer Aspire 1821P Timeline',
    'Acer Aspire 1830T TimelineX',
    'Acer Aspire 3410T Timeline',
    'Acer Aspire 3810T Timeline');对这个数组进行排序, "这还不容易",某些同志先不要激动,听我慢慢说;
    要求排序的结果是按类别排序,比如 1810的是一个类别,同一个类别再按照数字大小排序,那么1810所排的结果如下:
    ...
    'Acer Aspire 1810 Timeline',
    'Acer Aspire 1810T Timeline',
    'Acer Aspire 1810TZ Timeline',//这里注意,同一大小数字按照数字后面的字母类别排序,同时数字后面的字母由少到多排序
    'Acer Aspire 18100 Timeline',
    ...
    以此类推,就是按照同类别的大小长短排序!
    有劳各位了!
      

  2.   


    sort($arr, SORT_STRING);//就可以排序,,,如果只要某个分类,可以遍历一次,把需要的匹配出来即可
    print_r($arr);
      

  3.   

    sort($arr, SORT_STRING);
    //这种是按字符排序,遍历的结果如下:
    Acer Aspire 1810 Timeline
    Acer Aspire 18100 Timeline  
    Acer Aspire 1810T Timeline
    Acer Aspire 1810TZ Timeline
    Acer Aspire 1820P Timeline
    Acer Aspire 1830T TimelineX
    Acer TravelMate 220
    Acer TravelMate 2200
    Acer TravelMate 222
    Acer TravelMate 223
    Acer TravelMate 2300
    Acer TravelMate 2301
    Bcer TravelMate 230
    Ccer TravelMate 225//我想排后的结果如下:Acer Aspire 1810 Timeline
    Acer Aspire 1810T Timeline
    Acer Aspire 1810TZ Timeline
    Acer Aspire 18100 Timeline     //分类后再按照  数字大小 数字后面字母长短  排序,
    Acer Aspire 1820P Timeline
    Acer Aspire 1821P Timeline
    Acer Aspire 1830T TimelineX
    Acer Aspire 18200P Timeline
    Acer Aspire 3410T Timeline
    Acer Aspire 3810T Timeline
    Acer TravelMate 220
    Acer TravelMate 222
    Acer TravelMate 223
    Acer TravelMate 225
    Acer TravelMate 230
    Acer TravelMate 2200
    Acer TravelMate 2300
    Acer TravelMate 2301
      

  4.   

    Array
    (
        [0] => Acer Aspire 1810 Timeline
        [1] => Acer Aspire 1810T Timeline
        [2] => Acer Aspire 1810TZ Timeline
        [3] => Acer Aspire 1820P Timeline
        [4] => Acer Aspire 1821P Timeline
        [5] => Acer Aspire 1830T TimelineX
        [6] => Acer Aspire 3410T Timeline
        [7] => Acer Aspire 3810T Timeline
        [8] => Acer Aspire 18100 Timeline
        [9] => Acer Aspire 18200P Timeline
        [10] => Acer TravelMate 220
        [11] => Acer TravelMate 222
        [12] => Acer TravelMate 223
        [13] => Acer TravelMate 225
        [14] => Acer TravelMate 230
        [15] => Acer TravelMate 2200
        [16] => Acer TravelMate 2300
        [17] => Acer TravelMate 2301
    )
      

  5.   

    就是先按系列排序,每个系列再细分排序,这样显示就比较一目了然和人性化一些;其实18开头的就是一个系列,就是想一个系列再按数字大小排序,但 Acer Aspire 18100 Timeline 只会排在 Acer Aspire 1810 Timeline 后面,sort数组后只会按照字符去排序, 我想 Acer Aspire 18100 Timeline  排在18开头系列的最下方,就是这个相似度不怎么好比较,找不到思路了!
      

  6.   

    你可能需要的是这样的:
    Array
    (
        [0] => Acer Aspire 1810 Timeline
        [1] => Acer Aspire 1810T Timeline
        [2] => Acer Aspire 1810TZ Timeline
        [3] => Acer Aspire 18100 Timeline
        [4] => Acer Aspire 1820P Timeline
        [5] => Acer Aspire 18200P Timeline
        [6] => Acer Aspire 1821P Timeline
        [7] => Acer Aspire 1830T TimelineX
        [8] => Acer Aspire 3410T Timeline
        [9] => Acer Aspire 3810T Timeline
        [10] => Acer TravelMate 220
        [11] => Acer TravelMate 2200
        [12] => Acer TravelMate 222
        [13] => Acer TravelMate 223
        [14] => Acer TravelMate 225
        [15] => Acer TravelMate 230
        [16] => Acer TravelMate 2300
        [17] => Acer TravelMate 2301
    )$arr=array(
    'Acer TravelMate 220',  
    'Acer TravelMate 2200',
    'Acer TravelMate 222',
    'Acer TravelMate 223',
    'Acer TravelMate 225',
    'Acer TravelMate 230',
    'Acer TravelMate 2300',
    'Acer TravelMate 2301' , 
    'Acer Aspire 1810 Timeline',
    'Acer Aspire 18100 Timeline',
    'Acer Aspire 1810T Timeline',
    'Acer Aspire 1810TZ Timeline',
    'Acer Aspire 1820P Timeline',
    'Acer Aspire 18200P Timeline',
    'Acer Aspire 1821P Timeline',
    'Acer Aspire 1830T TimelineX',
    'Acer Aspire 3410T Timeline',
    'Acer Aspire 3810T Timeline');foreach($arr as $v) {
      preg_match('/(\w+ \w+) (\d+)(\w*)( |$)/i', $v, $r);
      $a[] = $r[1];
      $b[] = sprintf('%-10s', $r[2]);
      $c[] = $r[3];
    }
    array_multisort($a, $b, $c, $arr);
    print_r($arr);