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

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

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

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

Q&A

解決済

3回答

887閲覧

PHPの2次元配列をキーでソートしたい

Anon_

総合スコア334

PHP

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

0グッド

0クリップ

投稿2019/04/24 08:05

編集2019/04/24 08:28

下記のような配列がある場合キーで降順に並び替えたいのですが良い方法はありますでしょうか。

before

1【$datas】Array 2( 3 [2018] => Array 4 ( 5 [02] => aaa 6 [01] => bbb 7 [04] => ccc 8 ) 9 10 [2019] => Array 11 ( 12 [12] => ddd 13 [11] => eee 14 [10] => fff 15 ) 16) 17

after

1【$datas】Array 2( 3 [2019] => Array 4 ( 5 [12] => ddd 6 [11] => eee 7 [10] => fff 8 ) 9 10 [2018] => Array 11 ( 12 [04] => ccc 13 [02] => aaa 14 [01] => bbb 15 16 ) 17)

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

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

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

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

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

maisumakun

2019/04/24 08:19

サンプルの配列が3次元ではなく2次元だと思うのですが、間違ってはいないでしょうか。
Anon_

2019/04/24 08:27

色々調べたうえでの質問なので丸投げではありません。
Anon_

2019/04/24 08:28

すいません、2次元の間違いです。 見出しを修正しておきました。
退会済みユーザー

退会済みユーザー

2019/04/24 08:30

ソートする方法はどの程度知ってて、それを駆使してみようとしたけどできなかった、的なことが質問文中にあれば、そんなに印象悪くないと思うけど、そもそもテストするためのミニマルなコードくらいは書いてほしいのだよ。テストデータのキーが文字列なのか数値なのかで、使うソート関数も変わってしまうのだから。
Anon_

2019/04/24 08:34

なるほど。それは失礼いたしました。
m.ts10806

2019/04/24 08:52

質問本文に書いていないことは汲み取れません。 書いていないと、本当に何も調べず試さず質問する人との判別は不可能なので、そのあたりは配慮いただきたく。
guest

回答3

0

ベストアンサー

php

1<?php 2 3$datas = [ 4 2018 => [ 5 02 => 'aaa', 6 01 => 'bbb', 7 04 => 'ccc', 8 ], 9 2019 => [ 10 12 => 'ddd', 11 11 => 'eee', 12 10 => 'fff', 13 ], 14]; 15 16krsort($datas); 17foreach ($datas as &$arr) { 18 krsort($arr); 19} 20unset($arr); // 念の為参照をキャンセル 21var_dump($datas);

イメージ説明
unset()を入れることで最後の子配列への参照があることを示す「&」がとれる。


3次元化するなら、机上でテストしてないけどこうなるかもしれない。

php

1krsort($datas); 2foreach ($datas as &$arr) { 3 krsort($arr); 4 foreach ($arr as &$arr2) { 5 krsort($arr2); 6 } 7 unset($arr2); 8} 9unset($arr);

投稿2019/04/24 08:19

編集2019/04/24 08:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/04/24 08:22

狙った結果かもしれないけど、今ひとつ自信がない
退会済みユーザー

退会済みユーザー

2019/04/24 08:27

unset()つけたから大丈夫
Anon_

2019/04/24 08:53 編集

回答時間が早く、処理速度が一番速いと思われるm6u様をベストアンサーにさせていただきます。 回答いただいた皆様ありがとうございました。
guest

0

ベタな書き方で申し訳ないですが。(時間がなかった)

php

1<?php 2$datas = [ 3 '2018' => [ 4 '02' => 'aaa', 5 '01' => 'bbb', 6 '04' => 'ccc', 7 ], 8 '2019' => [ 9 '12' => 'ddd', 10 '11' => 'eee', 11 '10' => 'fff', 12 ], 13 ]; 14// 1階層をまず降順でソート 15krsort($datas); 16foreach ($datas as $key => $value) { 17 // 2階層を降順でソート 18 krsort($datas[$key]); 19} 20 21var_dump($datas);

小難しいことは何もしてません。

PHP: 配列のソート - Manual

投稿2019/04/24 08:22

Bernadotte

総合スコア310

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

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

0

PHP

1$data=[ 2 2018 =>[ 3 "02" => "aaa", 4 "01" => "bbb", 5 "04" => "ccc", 6 ], 7 2019 => [ 8 "12" => "ddd", 9 "11" => "eee", 10 "10" => "fff", 11 ], 12 ]; 13 14krsort($data); 15array_walk($data,function(&$x){ 16 krsort($x); 17}); 18print_r($data);

投稿2019/04/24 08:21

yambejp

総合スコア114572

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

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

Bernadotte

2019/04/24 08:25

このような書き方もあるんですね...。勉強になります。
Anon_

2019/04/24 08:51

ありがとうございます。 array_walk()を使った方法は勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問