2013-08-11 6 views
6

私は仕事用のカスタムスイッチマネージャを構築していますが、私の現在の問題はより美的ですが、良い学習経験だと思います。サブストリングに基づいたPHPのダブルソート配列

私の目標は、ソートにすることです...私たちの大きなスイッチで

Array 
(
    [1] => FastEthernet0/1 
    [10] => FastEthernet0/10 
    [11] => FastEthernet0/11 
    [12] => FastEthernet0/12 
    [13] => FastEthernet0/13 
    [14] => FastEthernet0/14 
    [15] => FastEthernet0/15 
    [16] => FastEthernet0/16 
    [17] => FastEthernet0/17 
    [18] => FastEthernet0/18 
    [19] => FastEthernet0/19 
    [2] => FastEthernet0/2 
    [20] => FastEthernet0/20 
    [21] => FastEthernet0/21 
    [22] => FastEthernet0/22 
    [23] => FastEthernet0/23 
    [24] => FastEthernet0/24 
    [3] => FastEthernet0/3 
    [4] => FastEthernet0/4 
    [5] => FastEthernet0/5 
    [6] => FastEthernet0/6 
    [7] => FastEthernet0/7 
    [8] => FastEthernet0/8 
    [9] => FastEthernet0/9 
    [25] => Null0 
) 

私はGigabitEthernet1/1は2/1の前に来てもらうためにasort($arr);を使用しています、など:私は、明確にするために、以下の配列を掲載しています1/8が1/10よりも前になるようにインタフェース番号( '/'の後ろにある部分)。

誰かが正しい方向に向いていると思いますが、私は結果のために働きたいと思いますが、どこに行くべきか正確に知るためにはPHPに慣れていません。

注:大型のマルチモジュールスイッチでは、IDが順序どおりでないため、$ arr [key]のソートは機能しません。

答えて

6

以下のように、asort()を使用している間、フラグを使用できます。

asort($arr, SORT_NATURAL | SORT_FLAG_CASE);print_r($arr); 

データは必要に応じて印刷/ソートされます。

+0

これは完全に機能しました。今、意味を研究する。 – xandout

2

SORT_NATURALおよびSORT_FLAG_CASEにはv5.4 +が必要です。

古いバージョンのPHPを使用している場合は、uasortとカスタム比較コールバック関数を使用して実行できます。

$interfaces = array(...); 
$ifmaj = array(); 
$ifmin = array(); 
$if_cmp = function ($a, $b) { 
    list($amaj,$amin) = split('/',$a); 
    list($bmaj,$bmin) = split('/',$b); 
    $maj = strcmp($amaj,$bmaj); 
    if ($maj!=0) return $maj; 
    //Assuming right side is an int 
    return $amin-$bmin; 
}; 
uasort($interfaces, $if_cmp); 
関連する問題