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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1622閲覧

PHP 多次元配列を特定の値でソートしたい

kans00229

総合スコア28

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/08/23 03:16

編集2017/08/23 04:01

PHPバージョン5.6
フレームワーク等は使用しておりません。

下記の配列をキーごとに["scorer_time"]で昇順に並べたいと
考えております。

例えば、キー[762]を["scorer_time"]の順に
並べる下記の配列であれば、["scorer_time"]が13の
配列[1]が最初に来るようにしたいと考えております。
※「実現したい配列の順番」のような感じになります。

色々なサイトを見て、array_multisortで実現
できそうな気がするのですが、私の知識が浅く
実現できないが現状です。

参考サイトや方法についてのご教授頂ければ
と思います。

宜しくお願いします。

//元の配列 array ( 764 => array ( 0 => array ( 'scorer_time' => '8', 'scorer' => '5', 'assist' => '16', ), 1 => array ( 'scorer_time' => '13', 'scorer' => '6', 'assist' => '15', ), ), 765 => array ( 0 => array ( 'scorer_time' => '0', 'scorer' => '0', 'assist' => '0', ), ), )
//実現したい配列の順番 array ( 764 => array ( 0 => array ( 'scorer_time' => '13', 'scorer' => '6', 'assist' => '15', ), 1 => array ( 'scorer_time' => '8', 'scorer' => '5', 'assist' => '16', ), ), 765 => array ( 0 => array ( 'scorer_time' => '13', 'scorer' => '6', 'assist' => '15', ), 1 => array ( 'scorer_time' => '80', 'scorer' => '5', 'assist' => '2', ), ), )

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

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

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

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

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

tsuemura

2017/08/23 03:46

配列の再現が面倒なので、var_dump()ではなく、var_export()した結果を貼っていただけないでしょうか?
guest

回答1

0

ベストアンサー

scorer_timeが同じだった場合どうしたいのかがわからないですね
常にユニークが保証されているのでしょうか?

PHP

1$a=[ 2 762=>[ 3 [ 4 "scorer_time"=>"20", 5 "scorer"=>"5", 6 "assist"=>"16", 7 ], 8 [ 9 "scorer_time"=>"13", 10 "scorer"=>"6", 11 "assist"=>"15", 12 ], 13 ], 14 763=>[ 15 [ 16 "scorer_time"=>"80", 17 "scorer"=>"5", 18 "assist"=>"2", 19 ], 20 [ 21 "scorer_time"=>"13", 22 "scorer"=>"6", 23 "assist"=>"15", 24 ], 25 ], 26 ]; 27 28foreach($a as &$b){ 29 usort($b,function($x,$y){ 30 $i=(int) $x["scorer_time"]; 31 $j=(int) $y["scorer_time"]; 32 return ($i==$j)?0:(($i>$j)?1:-1); 33 }); 34} 35 36print_r($a);

追記

2段階ソート

PHP

1$a=[ 2 762=>[ 3 [ 4 "scorer_time"=>"20", 5 "scorer"=>"5", 6 "assist"=>"16", 7 "inputnumber"=>"1", 8 ], 9 [ 10 "scorer_time"=>"13", 11 "scorer"=>"6", 12 "assist"=>"15", 13 ], 14 [ 15 "scorer_time"=>"20", 16 "scorer"=>"6", 17 "assist"=>"15", 18 "inputnumber"=>"2", 19 ], 20 ], 21 763=>[ 22 [ 23 "scorer_time"=>"80", 24 "scorer"=>"5", 25 "assist"=>"2", 26 "inputnumber"=>"2", 27 ], 28 [ 29 "scorer_time"=>"13", 30 "scorer"=>"6", 31 "assist"=>"15", 32 ], 33 [ 34 "scorer_time"=>"80", 35 "scorer"=>"99", 36 "assist"=>"99", 37 "inputnumber"=>"1", 38 ], 39 ], 40 ]; 41 42foreach($a as &$b){ 43 usort($b,function($x,$y){ 44 $i=(int) $x["scorer_time"]; 45 $j=(int) $y["scorer_time"]; 46 $k=(int) isset($x["inputnumber"])?$x["inputnumber"]:"999"; 47 $l=(int) isset($y["inputnumber"])?$y["inputnumber"]:"999"; 48 $ret=0; 49 if($i>$j){ 50 $ret=1; 51 }elseif($i<$j){ 52 $ret=-1; 53 }elseif($k>$l){ 54 $ret=1; 55 }elseif($k<$l){ 56 $ret=-1; 57 } 58 return $ret; 59 }); 60} 61 62print_r($a); 63

投稿2017/08/23 03:45

編集2017/08/23 06:19
yambejp

総合スコア114775

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

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

kans00229

2017/08/23 05:34

yambejp様 ご回答有難うございます。 scorer_timeについては1~90までの数字であり 同じ場合があります。 例えばフォームで入力された順番等(1~10など)の ユニークな値を追加したいと思います。 762=>[ [ "scorer_time"=>"20", "scorer"=>"5", "assist"=>"16", "inputnumber"=>"1", ], [ "scorer_time"=>"20", "scorer"=>"6", "assist"=>"15", "inputnumber"=>"2", ], ], scorer_timeが同じ場合は、フォームで入力された順番 が小さいものの順番で並べるようにできればと思います。 そのように比較する値が増えた場合 お教え頂いたものをどのように変更したら 良いかも、お伝え頂ければ幸いです。 質問が続き申し訳ありません。 宜しくお願い致します。
yambejp

2017/08/23 05:43

> フォームで入力された順番が小さいものの順番 それはinputnumberの昇順でよろしいですか?
kans00229

2017/08/23 06:20

yambejp様 inputnumberの昇順で宜しくお願い 致します。
kans00229

2017/08/23 06:49

yambejp様 ご回答有難うございます。 お教え頂きましたものを 実行すると下記のような実行結果 となり、ソートが出来なくなって いるようです。 scorer_timeとinputnumberの両方で ソートすることができればよいのですが。 scorer_timeの昇順でソートして もし、scorer_timeが同じなら inputnumberの数字が小さいほうが 先に並ぶという感じです。 お手数をお掛け致しますが、お力を お貸し頂ければと思います。 宜しくお願い致します。 //実行結果 array ( 762 => array ( 0 => array ( 'scorer_time' => '20', 'scorer' => '5', 'assist' => '16', 'inputnumber' => '1', ), 1 => array ( 'scorer_time' => '13', 'scorer' => '6', 'assist' => '15', 'inputnumber' => '2', ), 2 => array ( 'scorer_time' => '20', 'scorer' => '6', 'assist' => '15', 'inputnumber' => '3', ), ), 763 => array ( 0 => array ( 'scorer_time' => '80', 'scorer' => '5', 'assist' => '2', 'inputnumber' => '2', ), 1 => array ( 'scorer_time' => '13', 'scorer' => '6', 'assist' => '15', 'inputnumber' => '3', ), 2 => array ( 'scorer_time' => '80', 'scorer' => '99', 'assist' => '99', 'inputnumber' => '1', ), ), )
yambejp

2017/08/24 00:27

ごめんなさい、前回私の提示したもので動作するようです そのままコピペしてもだめでしょうか? たぶん大丈夫でしょうけど念の為エラーをE_ALLでとってみてください
kans00229

2017/08/24 07:34

yambejp様 最初にご提示頂きましたものでも 動作結果としては大丈夫でした。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問