2013-08-11 23 views
6

İş için özel bir anahtar yöneticisi yapıyorum, şu andaki sorun daha estetik bir konu ama iyi bir öğrenme deneyimi olduğunu düşünüyorum.PHP çift sıralı dizgeye göre sıralama dizisi

Amacım sıralama üzerinde etmektir ... Bizim daha büyük anahtarlarına

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 
) 

Ben GigabitEthernet1/1 2/1 önce gelip almaya asort($arr); kullanıyorum, vs: Ben netlik için aşağıdaki diziyi attılar Arabirim numarası ('/' den sonraki bölüm), 1/8 1/10'dan önce gelir.

Birisi bana doğru yönde işaret edebilir, sonuçlar için çalışmak istiyorum ama ben tam olarak nereye gideceğini bilmek için PHP ile yeterince tanıdık değilim.

Notlar: Daha geniş çoklu modül anahtarlarda kimlikler sıralı değildir, bu nedenle $ arr [key] üzerinde bir sıralama çalışmayacaktır.

cevap

6

Aşağıdaki gibi asort() kullanırken bayrağı kullanabilirsiniz.

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

yo gerek olarak verileri sıralamak/yazdırır.

+0

Bu, mükemmel bir şekilde çalıştı. Şimdi anlamı araştırmak için. – xandout

2

SORT_NATURAL ve SORT_FLAG_CASE, v5.4 + gerektirir.

PHP'nin daha eski bir sürümünü kullanıyorsanız, bunu uasort ve özel bir karşılaştırma geri çağırma işleviyle yapabilirsiniz.

$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);