2010-12-29 18 views
3

予約データは配列内にありますが、すでに[eng]でソートされていますが、[ampm]でソートしたいので、[eng]の各グループは[午前午後]。誰もがPHPでこれを達成する方法を知っていますか? http://www.php.net/manual/en/function.usort.php2つの値によるソート連想配列PHP

を二つの項目からengが異なる場合、あなたは1を返すことができますか-1に応じて、しかしengが同じであれば、あなたがampmを比較できるように:あなたはusort使用することができます

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

それに応じて0,1、または-1を返します。おそらくあなたは

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

ような何かをやっているあなたが好きな何かをする必要があります

<?php 

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

usort($bookingArray, "myBookingComparer"); 
2

あなたは自分のソート比較ですロジックを実行するコールバックを定義することができますusort()機能を使用することができます代わりに

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

    if ($eng == 0) { 
     return strcmp ($a['ampm'], $b['ampm']); 
    } else { 
     return $eng; 
    } 
});