2012-02-01 3 views
-1

で配列をソートする:はそうのように、日付と日付の一意の識別子を含むリストをソートするためのベストプラクティスでしょう何PHP

20110101 5 
20110101 78 
20150305 103 

(それはYYYYMMDD一意の識別子です)。

私はとりわけ、PHPでアレイを作製しようとしている:まあ...何が違う使用して、印刷する

[0] => Array 
     (
      [date] => 20110101 
      [order] => 3 
     ) 

    [1] => Array 
     (
      [date] => 20120101 
      [order] => 2 
     ) 

    [2] => Array 
     (
      [title] => 20130101 
      [order] => 1 
     ) 
) 

$data[] = array('date' => 20100101, 'number' => 122); 
$data[] = array('date' => 20110123, 'number' => 120); 
$data[] = array('date' => 20111212, 'number' => 123); 
$data[] = array('date' => 20091212, 'number' => 121); 
$data[] = array('date' => 20151212, 'number' => 100); 
$data[] = array('date' => 20151212, 'number' => 99); 

が、私はPHPを取得するために管理することはできませんソート方法(array_multisortなど)

私が達成したいのは、日付と一意の番号でソートされたリストです。私は初心者レベルでの回答を保管してください松下電工とPHPに新鮮な、午前

20151212 100, 
20151212 99, 
20111212 123 

:第二の例は、このようにのように始まるだろう!

ありがとうございます!

+1

正確に並べ替えようとしているものは何ですか? – MetalFrog

+1

可能な複製http://stackoverflow.com/search?q=sorting+multidimensional+array – Gordon

+1

コードを表示してください。 ['array_multisort'のドキュメント(http://php.net/manual/en/function.array-multisort.php)の3番目の例は、それを行うための1つの方法を示しています。 –

答えて

0

問題を攻撃するための最良の方法は、次にとして日付を使用usort

function cmp($a,$b){ 
    //do the necessary check if $a and $b conforms to your structure 
    if($a['date'] < $b['date']) return -1; 
    if($a['date'] > $b['date']) return 1; 
    if($a['number'] > $b['number'] return 1; 
    if($a['number'] < $b['number'] return -1; 
    return 1; 
} 

usort($data,'cmp'); 
+0

ありがとうございます。それは確かに動作します。しかし、あなたのソリューションをさらに見てみると、以下のようになりました。foreach($ key => $ rowの$ data){ $ date [$ key] = $ row ['date']; $ number [$ key] = $ row ['number']; }。より少ないコードでこのトリックを実行します! – Matte

0

usortの機能をご覧ください。配列をソートするための独自の関数を記述することができます。これらの例は十分なものでなければなりません。

1

を使用して、日付

の一意の識別子をエントリをソートするためにコールバック関数を使用することです配列のキーとそれを返す:

$data = array(20100101 => 122 
     , 2011=> 120 
     , 20111212 => 123 
     , 20091212 => 121 
     .... 

OTOHネストされた配列構造体がコードに追加されている場合は、PHPで多次元配列をソートする方法に関する多くの質問を参照してください。

+1

例から、同じ日付が複数回現れることがあります。 –

+0

答えに感謝しますが、フェリックス・キングは同じ日付が複数回現れることに注意しました。 'ksort'は同様の日付を集め、最も高い数字のものだけを表示します。 20150101 => 10と20150101 => 30は[20150101] => 30と表示されます。 – Matte

+0

@Matte: "それはYYYYMMDDの一意の識別子です" - ユニークな識別子ではありません。 ksortはそれらを束ねないので、同じキーで2つの配列要素を作成することはできません。 – symcbean