2011-11-01 83 views
7

Tôi đang phá vỡ đầu tôi cố gắng tìm ra cách để làm điều này đúng, tôi có mảng này đa chiều:mảng đa chiều sắp xếp theo chuỗi

Array 
(
    [0] => Array 
     (
      [time] => November 1st 10:10 
      [query] => movies 
      [set] => 1 
      [matches] => No matching results 
      [results] => 5 
     ) 

    [1] => Array 
     (
      [time] => November 1st 10:10 
      [query] => cinemas 
      [set] => 1 
      [matches] => No matching results 
      [results] => 2 
     ) 

) 

Trong cuộc sống thực, có thể có rất nhiều phụ hơn mảng, nhưng et nói rằng tôi muốn sắp xếp nó bằng "truy vấn" theo thứ tự abc, làm sao tôi có thể đạt được điều này?

tôi thấy chỉ có giải pháp cho loại số nguyên hoặc chỉ số quan trọng, kết quả cuối cùng, trong trường hợp này, sẽ là:

Array 
    (
     [0] => Array 
      (
       [time] => November 1st 10:10 
       [query] => cinemas 
       [set] => 1 
       [matches] => No matching results 
       [results] => 2 
      ) 
     [1] => Array 
      (
       [time] => November 1st 10:10 
       [query] => movies 
       [set] => 1 
       [matches] => No matching results 
       [results] => 5 
      ) 

    ) 

nhiều đánh giá cao, cảm ơn.

Trả lời

15
function querySort ($x, $y) { 
    return strcasecmp($x['query'], $y['query']); 
} 

usort($myArray, 'querySort'); 
+0

Không hoạt động cho tôi! –

+0

Làm việc như một sự quyến rũ đối với tôi. –

1

Tôi thường sử dụng chức năng này để sắp xếp mảng đa chiều:

function sortmulti ($array, $index, $order, $natsort=FALSE, $case_sensitive=FALSE) { 
     if(is_array($array) && count($array)>0) { 
      foreach(array_keys($array) as $key) { 
       $temp[$key]=$array[$key][$index]; 
      } 
      if(!$natsort) { 
       if ($order=='asc') { 
        asort($temp); 
       } else {  
        arsort($temp); 
       } 
      } 
      else 
      { 
       if ($case_sensitive===true) { 
        natsort($temp); 
       } else { 
        natcasesort($temp); 
       } 
       if($order!='asc') { 
       $temp=array_reverse($temp,TRUE); 
       } 
      } 
      foreach(array_keys($temp) as $key) { 
       if (is_numeric($key)) { 
        $sorted[]=$array[$key]; 
       } else {  
        $sorted[$key]=$array[$key]; 
       } 
      } 
      return $sorted; 
     } 
    return $sorted; 
} 

Làm việc một nét duyên dáng :)

1

đồng ý với câu trả lời @Hammerite, Nhưng đây là một con đường ngắn nhất để làm điều này loại phân loại. Bạn có thể đạt được kết quả tương tự bắt đầu từ PHP 5.3, bằng cách sử dụng một anonymous function:

usort($myArray, function($x, $y) { 
     return strcasecmp($x['query'] , $y['query']); 
}); 

17,1. - chỉ sửa lỗi cú pháp

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