2017-07-11 3 views
0

PHPのuasort関数で配列を使用しています。 $a[0]['date'] == $b[0]['date']の場合、ソートしたくありません。PHPが、値が等価であれば、並べ替えを防ぐことができます。

とにかく、私のコードはとにかく並べ替えられます。どうしたらそれを防ぐことができますか?ここで

は私の配列です:

そして、ここでは配列です:

Array (
    [2764] => Array (
    [status] => 0 

    [0] => Array (
     [date] => 2000-01-01 
    ) 

    [1] => Array (
     [date] => 2016-01-16 
    ) 
) 

    [5974] => Array (
    [status] => 0 

    [0] => Array (
     [date] => 2000-01-01 
    ) 

    [1] => Array (
     [date] => 2010-12-13 
    ) 
) 
) 

そして、ここでは、私が並べ替えしようとしている方法です:

uasort($arr, function($a, $b) 
{ 
    if ($a['status'] == $b['status']) 
    { 
    if ($a[0]['date'] == $b[0]['date']) 
    { 
     return 0; # I do not want to sort here, but this will sort anyway - why is that so? 
    } 
    else 
    { 
     return strcmp($a[0]['date'], $b[0]['date']); 
    } 
    } 
    else 
    { 
    return $b['status'] - $a['status']; 
    } 
}); 

どのようにソートインデックスによってできました日付が同じ場合は?私はdocumentationのようにインデックス2764と5974.

答えて

2

でソート意味:

If two members compare as equal, their relative order in the sorted array is undefined. 

だから、あなたは、このようなそれと等しいエントリによってoriginal_orderと一種として、余分な値を導入する必要があります。

+0

日付が同じ場合、どのようにインデックスで並べ替えることができますか?私はインデックス2764と5974で並べ替えることを意味します。 – xms

+0

あなたはこのようなものを使用しようとすることができます:http://php.net/manual/pl/function.asort.php#80798 – kuba

+0

私は新しいキー/アレイ。日付が同じ場合、配列は元の順序番号でソートできます。あなたの助けに感謝します。 – xms

関連する問題