質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2554閲覧

多次元配列 特定のキーでソート

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/05/13 11:10

編集2016/05/14 10:02

PHP

1$array = array( 2 array ( 3 'id' => '1', 4 'a_date' => '2016-04-30', 5 ), 6 array ( 7 'id' => '2', 8 'a_date' => '2016-05-21', 9 ), 10 array ( 11 'id' => '3', 12 'b_date' => '2016-05-30', 13 ), 14 array ( 15 'id' => '4', 16 'b_date' => '2016-04-02', 17 ), 18);

このような多次元配列があります。
この配列を日付でソートしたいと思ってます。

PHP

1$sort = array(); 2foreach($array as $key=>$value) { 3 $sort['a_date'][$key] = $value['a_date']; 4} 5array_multisort($sort['a_date'], SORT_ASC,$array); 6var_dump($array);

このように記述してみましたが、「a_date」だけではなく、「b_date」も含めてソートしたいのでエラーが出てしまいます。
今回のようなキーが違うけれども、異なるキーで日付順に並び替えしたい場合は、どのような記述になるのでしょうか?

ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

同じ内容で新規質問されているようですが、こちらを見ていたのでこちらに回答します。
takasima20さんの回答は ? が抜けているだけだと思うのですが、エラー文をコメントで伝えるなりすれば解決できたのではと思います。


array_multisort を使う。

PHP

1$sort = array(); 2foreach( $array as $key => $value ) { 3 $sort[ $key ] = ( isset( $value[ 'a_date' ] ) ) ? $value[ 'a_date' ] : $value[ 'b_date' ]; 4} 5array_multisort( $sort, $array ); 6var_dump( $array ); 7```実行結果:[http://ideone.com/j15tly](http://ideone.com/j15tly) 8 9--- 10 11 12`array_multisort` / `array_map` を使う。 13```PHP 14array_multisort( array_map( function ( $value ) { return ( isset( $value[ 'a_date' ] ) ) ? $value[ 'a_date' ] : $value[ 'b_date' ]; }, $array ), $array ); 15var_dump( $array ); 16```実行結果:[http://ideone.com/9WWh2E](http://ideone.com/9WWh2E) 17 18--- 19 20`usort` を使う。 21```PHP 22usort( $array, function ( $a, $b ) { 23 $x = ( isset( $a[ 'a_date' ] ) ) ? 'a_date' : 'b_date'; 24 $y = ( isset( $b[ 'a_date' ] ) ) ? 'a_date' : 'b_date'; 25 return strnatcmp( $a[ $x ], $b[ $y ] ); 26} ); 27var_dump( $array ); 28```実行結果:[http://ideone.com/8eV5ZA](http://ideone.com/8eV5ZA) 29 30--- 31 32上記のものはどれも同じ結果が得られると思います。速度が違うという話がありますが、気になるようなら計測してから使ってみてください。

投稿2016/05/15 20:22

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

思いつきですがこんな感じで

PHP

1<?php 2function cmp($a, $b) 3{ 4 $x = (isset($a['a_date'])) $a['a_date'] : $a['b_date']; 5 $y = (isset($b['a_date'])) $b['a_date'] : $b['b_date']; 6 return strcmp($x, $y); 7} 8 9// $array の定義は略 10 11usort($array, "cmp"); 12?>

投稿2016/05/13 11:27

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問