2013-08-11 42 views
6

Tôi đang xây dựng trình quản lý chuyển đổi tùy chỉnh cho công việc, vấn đề hiện tại của tôi là một vấn đề thẩm mỹ nhưng tôi nghĩ đó là trải nghiệm học tập tốt. Tôi đã đăng mảng dưới đây cho rõ ràng:Mảng xếp chồng kép PHP dựa trên chuỗi con

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 
) 

Mở công tắc lớn của chúng tôi Tôi đang sử dụng để có được asort($arr); GigabitEthernet1/1 đến trước 2/1, vv ...

Mục tiêu của tôi là để sắp xếp trên số giao diện (một phần sau '/') sao cho 1/8 đến trước 1/10.

Ai đó có thể chỉ cho tôi đúng hướng, tôi muốn làm việc cho kết quả nhưng tôi không đủ quen thuộc với PHP để biết chính xác nơi cần đi.

Ghi chú: Bật các công tắc đa mô-đun lớn hơn, các ID không theo thứ tự sao cho sắp xếp trên $ arr [key] sẽ không hoạt động.

Trả lời

6

Bạn có thể sử dụng cờ trong khi sử dụng asort(), như dưới đây.

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

Nó sẽ in/sắp xếp dữ liệu theo nhu cầu của bạn.

+0

Điều này hoạt động hoàn hảo. Bây giờ để nghiên cứu ý nghĩa. – xandout

2

SORT_NATURAL và SORT_FLAG_CASE yêu cầu v5.4 +.

Nếu bạn đang sử dụng phiên bản cũ hơn của PHP, bạn có thể làm điều đó với uasort và chức năng gọi lại so sánh tùy chỉnh.

$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); 
Các vấn đề liên quan