2016-07-25 14 views
0

以下の配列を「終了」でソートしようとすると、簡単な方法がありますか?単純なPHP配列サブ配列キーによる並べ替え

$feature_event = array(
    array(
     "title"  => "Classic", 
     "date"  => "October 28 - 30 2016", 
     "end"  => strtotime("October 30, 2016") 
    ), 
    array(
     "title"  => "Ski Weekend", 
     "date"  => "February 5-8, 2017", 
     "end"  => strtotime("February 8, 2017") 
    ), 
    array(
     "title"  => "NBA Weekend", 
     "date"  => "February 17-19, 2017", 
     "end"  => strtotime("February 19, 2017") 
    ), 
    array(
     "title"  => "Fiesta", 
     "date"  => "May 26-28, 2017", 
     "end"  => strtotime("May 28, 2017") 
    ) 

結果をforeachループ経由で出力していますが、結果を3つに制限します。

<?php foreach(array_slice($feature_event, 0, 3) as $event): ?> 
... 
<?php endforeach; ?> 

中小説明: 私はイベントに関連付けられている画像を表示しようとしています。各イベントには特定の終了日があります。終了日が過ぎると、ループの次のイメージを表示しますが、配列を終了日でソートします。私はusort関数がそのトリックをするだろうと理解していますが、私はコーディングの進歩ではありません。 "終わり"で並べ替えを行う簡単な方法はありますか、私はusortを行う必要があります。もし私が必要なら、私はまだforloopが必要でしょうか? Plzは私のばかな質問を許します。

UPDATE

この配列のマルチソートソリューション

array_multisort(array_column($feature_event, 'end'), $feature_event); 

は、私はそれが必要だが、私は出力電流の日付オフに基づいてデータをしたいと思います...私は「できる方法をソートtは私のforloop内

が、私はこの条件を持っている...正しく動作する条件を作成するように見える:

<?php 
date_default_timezone_set("America/Chicago"); 
$now = strtotime("now"); 
?> 

<?php if($now <= $event["end"]) :?> 
    ... code ... 
<?php endif;?> 

しかし、それは2つのイベントを出力しています....私が間違っていることに関するアイデア。これは上のforeachloopの内側にある場合。

end
+1

これはDBのですか?なぜそこから制限とソートをしないのですか? 'array_slice'と' usort'はもうありません – Ghost

+0

これは小さなウェブサイトの静的データです。それは、ソートを使用しないサブアレイのキーに基づいてPHPでソートして制限する方法ですか?私が言ったように、私は単純な解決策を好むだろうが、より良い選択肢があれば、もう少し進歩すれば、それに反対するつもりはない。 –

+0

編集された答え、 'strtotime()'部分を誤って読みました。 – AbraCadaver

答えて

1

値だけ配列にそれらを抽出し、それを並べ替える、元の配列をソートし、タイムスタンプであるので:

PHP < 5.5.0

array_multisort(
    array_map(function($v) { return $v['end']; }, $feature_event), $feature_event); 

PHP> = 5.5 .0

array_multisort(array_column($feature_event, 'end'), $feature_event); 

または並べ替える方法に応じて3番目のパラメータとしてを入力します。

次に、array_slice()を使用して最初または最後の3とループを取得します。

+0

ニース、これは正しく並べ替えます。私は配列のprint_rを行い、チェックしました。私の唯一の問題は、現在の日付と終了日に基づいてループからデータを出力するための正しい条件を作成することです...したがって、基本的に、終了日を超えていない3つの最新のイベント.... –

関連する問題