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

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

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

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

Q&A

解決済

3回答

3069閲覧

2つの配列データをキーでソートする

omusoba

総合スコア29

PHP

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

0グッド

0クリップ

投稿2016/10/21 08:57

編集2016/10/21 09:11

こんにちは。
現在作成している処理で少々困ったことになってしまっておりご協力をいただければと思い投稿いたしました。

【前提】

php

1//配列の例(本来日付などは別々に入ります) 2$array1 = Array( 3 4 [0] => Array 5 ( 6 'id' => 1 7 'track_num' => 1 8 'title' => CHRONO DIVER -NORNIR- 9 'date' => 2016-10-21 16:01:25 10 ) 11 12 [1] => Array 13 ( 14 'id' => 2 15 'track_num' => 3 16 'title' => illuminate 17 'date' => 2016-10-21 16:01:25 18 ) 19 20 [2] => Array 21 ( 22 'id' => 0 23 'track_num' => 7 24 'title' => ベィスドロップ・フリークス 25 'date' => 2016-10-21 16:01:25 26 ) 27); 28 29$array= Array( 30 31 [0] => Array 32 ( 33 'id' => 1 34 'track_num' => 1 35 'title' => CHRONO DIVER -NORNIR- 36 'date' => 2016-10-21 16:01:25 37 ) 38 39 [1] => Array 40 ( 41 'id' => 2 42 'track_num' => 3 43 'title' => illuminate 44 'date' => 2016-10-21 16:01:25 45 ) 46 47 [2] => Array 48 ( 49 'id' => 0 50 'track_num' => 7 51 'title' => ベィスドロップ・フリークス 52 'date' => 2016-10-21 16:01:25 53 ) 54); 55 56

これを結合してから、中のキーである’date’に合わせて最新順にソートしたいと考えていました。
なので

php

1 2$array3 = array_merge($array1,$array2); 3 4foreach ((array) $array3 as $key => $value) { 5 $sort[$key] = $value['date']; 6} 7 8array_multisort($sort, SORT_ASC, $array3); 9print_r($array3);

このように書きましたがうまくいきませんでした。
多分キーの設定がまちがっている感じがするのですがその辺がよくわかっていない状態です。

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

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

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

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

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

guest

回答3

0

ベストアンサー

いまいち要領を得ませんが
$array3の各要素をdateの降順にソートすればよいのでしょうか?
その際、もしdateが同値だった場合別のキーでソートする必要はあるのでしょうか?

※単純なユーザーソート

usort($array3,function($a,$b){ if($a["date"]==$b["date"]) return 0; return $a["date"]<$b["date"]?1:-1; }); print_r($array3);

投稿2016/10/21 09:43

yambejp

総合スコア114572

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

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

omusoba

2016/10/21 09:46

わかりづらく書いてしまいすみません。 一応最初の方にコメントアウトしているのですが、あくまで例として出してしまったので、日付もバラバラで入ります。 実際このまま結合したままだと$array1の連想配列の直後に$array2の連想配列がくっついてしまう状況ですので、それを日付順でソートしたいんというのが今回の内容になります。
yambejp

2016/10/21 09:50

一応そのつもりで回答してありますのでサンプルを一度ためしてみてください
omusoba

2016/10/21 09:56

もう少しテストしてみる必要はありますが、動きました。 ありがとうございます!
guest

0

SORT_DESCじゃないのかな。
あと例とは言えちゃんと動くコードを書いた方がいいかと。

投稿2016/10/21 09:38

bbChaos

総合スコア12

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

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

mpyw

2016/10/21 09:42

print_rじゃなくてvar_exportを使うべきですね,同意します
guest

0

foreach の中で「3」が全角じゃないスか?

投稿2016/10/21 09:09

takasima20

総合スコア7458

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

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

omusoba

2016/10/21 09:10

ちなみにこれはあくまでも例なので変数は全く別のものです。 一応これも修正して起きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問