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

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

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

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

Q&A

解決済

3回答

345閲覧

複数の配列のソートをする方法

StraightGrain

総合スコア14

PHP

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

0グッド

0クリップ

投稿2019/01/09 09:01

編集2019/01/09 09:42

PHPを使用して下記の条件でソートをしたいです。

1.配列$team_listから'rank'で昇順、重複するものは'team_id'で昇順でソート(ソート1)
2.同じキーの配列$tank_list,配列$num_listも(ソート1)と同じ順番にソート(ソート2)

どのような方法がありますでしょうか?

//現在 $team_list = Array( 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ), 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチーム', 'rank' => 3), 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2), 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 2), 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 4), 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3), 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2), 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4), 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4), ); $tank_list = Array ( 0 => 'IV号戦車D型', 1 => 'ヘッツァー', 2 => '八九式中戦車甲型', 3 => 'III号突撃砲F型', 4 => 'M3中戦車リー', 5 => 'ルノーB1bis', 6 => 'ポルシェティーガー', 7 => '三式中戦車', 8 => 'Mk.IV戦車', ); $num_list = Array ( 0 => '5人', 1 => '3人', 2 => '4人', 3 => '4人', 4 => '6人', 5 => '3人', 6 => '4人', 7 => '3人', 8 => '5人', );
//ソート後 $team_list = Array( 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ), 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2), 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 2), 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2), 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチーム', 'rank' => 3), 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3), 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 4), 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4), 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4), ); $tank_list = Array ( 0 => 'IV号戦車D型', 2 => '八九式中戦車甲型', 3 => 'III号突撃砲F型', 6 => 'ポルシェティーガー', 1 => 'ヘッツァー', 5 => 'ルノーB1bis', 4 => 'M3中戦車リー', 7 => '三式中戦車', 8 => 'Mk.IV戦車', ); $num_list = Array ( 0 => '5人', 2 => '4人', 3 => '4人', 6 => '4人', 1 => '3人', 5 => '3人', 4 => '6人', 7 => '3人', 8 => '5人', );

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

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

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

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

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

papinianus

2019/01/09 09:17

「3.配列のキーを再振り分け」←ここって何がしたいのでしょうか?
StraightGrain

2019/01/09 09:30

よく考えれば、ソートすることでキーは自動で割り振られますね、、 混乱させてしまい失礼しました。こちらは削除します。
guest

回答3

0

よくみるとカバさんやウサギさんチームのrankがおかしい

一度まとめてあとでバラしてはどうでしょう?

PHP

1$team_list = Array( 2 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ), 3 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチーム', 'rank' => 3), 4 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2), 5 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 3), 6 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 3), 7 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3), 8 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2), 9 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4), 10 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4), 11 ); 12$tank_list = Array ( 13 0 => 'IV号戦車D型', 14 1 => 'ヘッツァー', 15 2 => '八九式中戦車甲型', 16 3 => 'III号突撃砲F型', 17 4 => 'M3中戦車リー', 18 5 => 'ルノーB1bis', 19 6 => 'ポルシェティーガー', 20 7 => '三式中戦車', 21 8 => 'Mk.IV戦車', 22); 23 24$num_list = Array ( 25 0 => '5人', 26 1 => '3人', 27 2 => '4人', 28 3 => '4人', 29 4 => '6人', 30 5 => '3人', 31 6 => '4人', 32 7 => '3人', 33 8 => '5人', 34); 35 36$all=array_map(function($x,$y,$z){ 37 return [$x,$y,$z]; 38},$team_list,$tank_list,$num_list ); 39usort($all,function($x,$y){ 40 if($x[0]['rank']===$y[0]['rank']) return $x[0]['team_id']>$y[0]['team_id']?1:-1; 41 return $x[0]['rank']>$y[0]['rank']?1:-1; 42}); 43$team_list=array_map(function($x){ 44 return $x[0]; 45},$all); 46$tank_list=array_map(function($x){ 47 return $x[1]; 48},$all); 49$num_list=array_map(function($x){ 50 return $x[2]; 51},$all); 52 53print_r($team_list); 54print_r($tank_list); 55print_r($num_list);

投稿2019/01/09 09:31

yambejp

総合スコア114769

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

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

0

ベストアンサー

データが間違ってて手惑いましたが($team_list[3]のデータが現在とソート後で違う)

php

1<?php 2//現在 3$team_list = Array( 4 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ), 5 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチーム', 'rank' => 3), 6 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2), 7 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 2), 8 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 4), 9 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3), 10 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2), 11 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4), 12 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4), 13); 14$tank_list = Array ( 15 0 => 'IV号戦車D型', 16 1 => 'ヘッツァー', 17 2 => '八九式中戦車甲型', 18 3 => 'III号突撃砲F型', 19 4 => 'M3中戦車リー', 20 5 => 'ルノーB1bis', 21 6 => 'ポルシェティーガー', 22 7 => '三式中戦車', 23 8 => 'Mk.IV戦車', 24); 25$num_list = Array ( 26 0 => '5人', 27 1 => '3人', 28 2 => '4人', 29 3 => '4人', 30 4 => '6人', 31 5 => '3人', 32 6 => '4人', 33 7 => '3人', 34 8 => '5人', 35); 36 37uasort($team_list, function($a, $b) { 38 if($a['rank'] != $b['rank']) { 39 return($a['rank'] - $b['rank']); 40 } 41 return($a['team_id'] - $b['team_id']); 42}); 43 44$keys = array_keys($team_list); 45 46// 素直に入れ直したほうが早い気もする 47uksort($tank_list, function($a, $b) use($keys) { 48 return(array_search($a, $keys) - array_search($b, $keys)); 49}); 50uksort($num_list, function($a, $b) use($keys) { 51 return(array_search($a, $keys) - array_search($b, $keys)); 52}); 53 54var_dump($team_list); 55var_dump($tank_list); 56var_dump($num_list);

投稿2019/01/09 09:31

rururu3

総合スコア5545

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

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

0

php

1<?php 2$full = []; 3$keys = ["team_id" => "team_list", "team_name" => "team_list", "rank" => "team_list", "tank" => "tank_list", "members" => "num_list"]; 4for($i = 0 ; $i <= 8 ; $i++ ) { 5 foreach($keys as $key => $value) { 6 $full[$i][$key] = $$value[$i][$key] ?? $$value[$i]; 7 } 8} 9var_export($full); 10array_multisort(array_column($full, "rank"), SORT_ASC,array_column($full, "team_id"), SORT_ASC,$full); 11foreach($full as $row) { 12 echo implode(", ", $row).PHP_EOL; 13} 14var_export($full); 15$tank_list = array_column($full, "tank"); 16$num_list = array_column($full, "members"); 17var_export($tank_list); 18var_export($num_list); 19 20// datas 21$team_list = Array( 22 0 => Array( 'team_id' => 1, 'team_name' => 'アンコウさんチーム', 'rank' => 1 ), 23 1 => Array( 'team_id' => 2, 'team_name' => 'カメさんチーム', 'rank' => 3), 24 2 => Array( 'team_id' => 3, 'team_name' => 'アヒルさんチーム', 'rank' => 2), 25 3 => Array( 'team_id' => 4, 'team_name' => 'カバさんチーム', 'rank' => 2), 26 4 => Array( 'team_id' => 5, 'team_name' => 'ウサギさんチーム', 'rank' => 4), 27 5 => Array( 'team_id' => 6, 'team_name' => 'カモさんチーム', 'rank' => 3), 28 6 => Array( 'team_id' => 7, 'team_name' => 'レオポンさんチーム', 'rank' => 2), 29 7 => Array( 'team_id' => 8, 'team_name' => 'アリクイさんチーム', 'rank' => 4), 30 8 => Array( 'team_id' => 9, 'team_name' => 'サメさんチーム', 'rank' => 4), 31 ); 32$tank_list = Array ( 33 0 => 'IV号戦車D型', 34 1 => 'ヘッツァー', 35 2 => '八九式中戦車甲型', 36 3 => 'III号突撃砲F型', 37 4 => 'M3中戦車リー', 38 5 => 'ルノーB1bis', 39 6 => 'ポルシェティーガー', 40 7 => '三式中戦車', 41 8 => 'Mk.IV戦車', 42); 43 44$num_list = Array ( 45 0 => '5人', 46 1 => '3人', 47 2 => '4人', 48 3 => '4人', 49 4 => '6人', 50 5 => '3人', 51 6 => '4人', 52 7 => '3人', 53 8 => '5人', 54);

投稿2019/01/09 09:10

編集2019/01/11 03:00
papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問