2016-04-01 12 views
5

Với mảng này:PHP: đặt hàng một mảng đa chiều theo một danh sách các giá trị

Array 
(
    [0] => Array 
     (
      [status] => closed 
      [userModifiedAt] => 2015-12-09T11:47:46Z 
     ) 

    [1] => Array 
     (
      [status] => active 
      [userModifiedAt] => 2016-02-08T16:43:26Z 
     ) 

    [2] => Array 
     (
      [status] => closed 
      [userModifiedAt] => 2016-03-31T03:47:19Z 
     ) 

    [3] => Array 
     (
      [status] => pending 
      [userModifiedAt] => 2015-12-08T14:09:58Z 
     ) 

tôi muốn đặt nó bởi [tình trạng] với thứ tự này: - cấp phát - hoạt động - đóng

Và cho từng trạng thái, đặt hàng bởi [userModifiedAt].

Tôi đang sử dụng mã này:

usort($array, function($a,$b){ return strcmp($a['status'], $b['status']);}); 

Nhưng nó hoạt động theo thứ tự abc, do đó trạng thái được đặt hàng như: - hoạt động - đóng - cấp phát

Làm thế nào tôi có thể đặt một mảng theo vào danh sách đơn đặt hàng được xác định trước?

Trả lời

7

Đây sẽ là một thủ thuật -

## A array with the orders to be considered 
$order = array('active' => 1, 'closed' => 2, 'pending' => 3); 

usort($array, function($a, $b) use($order) { // Use the order array to compare 
    return $order[$a[status]] - $order[$b[status]]; 
}); 

var_dump($array); 

Output

array(4) { 
    [0]=> 
    array(2) { 
    ["status"]=> 
    string(6) "active" 
    ["userModifiedAt"]=> 
    string(20) "2016-02-08T16:43:26Z" 
    } 
    [1]=> 
    array(2) { 
    ["status"]=> 
    string(6) "closed" 
    ["userModifiedAt"]=> 
    string(20) "2015-12-09T11:47:46Z" 
    } 
    [2]=> 
    array(2) { 
    ["status"]=> 
    string(6) "closed" 
    ["userModifiedAt"]=> 
    string(20) "2016-03-31T03:47:19Z" 
    } 
    [3]=> 
    array(2) { 
    ["status"]=> 
    string(7) "pending" 
    ["userModifiedAt"]=> 
    string(20) "2015-12-08T14:09:58Z" 
    } 
} 

Thay đổi thứ tự array nếu bạn muốn thứ tự khác nhau. Khóa có giá trị thấp nhất sẽ là đầu tiên trên array. Nếu bạn muốn đóng trước tiên, hãy cung cấp giá trị thấp nhất cho nó trong mảng $order.

DEMO

+3

Ok để bạn cũng có thể làm điều kỳ diệu? :) Không biết! –

+0

Bây giờ ở cấp độ Người mới bắt đầu. @HankyPanky :) –

+0

@Sougata cảm ơn bạn, đó là hoàn hảo! –

Các vấn đề liên quan