2010-12-29 4 views
3

У меня есть данные для заказа в массиве, они уже отсортированы по [eng], но я также хочу сортировать по [ampm], поэтому каждая группа [eng] сортируется по [ до полудня после полудня]. Кто-нибудь знает, как это сделать в php?сортировать ассоциативный массив по двум значениям PHP

Array 
(
    [xml] => Array 
     (
      [booking] => Array 
       (
        [0] => Array 
        (

         [date] => 29/12/10 
         [eng] => ALS 
         [ampm] => AM 
         [time] => 2.00 
         [type] => S 
         [seq] =>2 
         [duration] => 0 

        ) 

       [1] => Array 
        (

         [date] => 29/12/10 
         [eng] => BDS 
         [ampm] => PM 
         [time] =>  2.30 
         [type] => S 
         [seq] =>  3 
         [duration] =>  0 

        ) 
+1

Попробуйте array_multisort() – DampeS8N

+1

@D ampeS8N: 'array_multisort' работает по-разному. –

+0

См. Также http://stackoverflow.com/questions/3606156/sort-an-associative-array-in-php-with-multiple-condition (вопрос беспорядок, но принятый ответ является указателем на то, что вам нужно) –

ответ

3

вы можете использовать usort: http://www.php.net/manual/en/function.usort.php

так, что когда eng из двух элементов различны, вы можете вернуть 1 или -1, соответственно, но если eng одинаковы, то вы можете сравнить ampm с 0, 1 или -1 соответственно.

2

Вы можете использовать usort() функции, где вы можете определить функцию обратного вызова, чтобы сделать собственную сортировать Comparision логики:

<?php 

function myBookingComparer($booking1, $booking2) 
{ 
    // the logic 
} 

usort($bookingArray, "myBookingComparer"); 
1

Предположительно вы делаете что-то вроде

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

Вы должны были бы сделать что-то вроде это вместо этого:

usort($array, function ($a, $b) { 
    $eng = strcmp($a['eng'], $b['eng']); 

    if ($eng == 0) { 
     return strcmp ($a['ampm'], $b['ampm']); 
    } else { 
     return $eng; 
    } 
}); 
Смежные вопросы