重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

配列のソート方法の仕方がわからず調べているのですが、なかなかできず困っております。
どなたかご教授お願いいたします。
array(5) {
[0]=> array(3) {
["id"]=> string(1) "1"
["size"]=> string(5) "100"
["message"]=> string(7) "テスト1"
}
[1]=> array(3) {
["id"]=> string(1) "2"
["size"]=> string(5) "200"
["message"]=> string(7) "テスト2"
}
[2]=> array(3) {
["id"]=> string(1) "3"
["size"]=> string(5) "300"
["message"]=> string(7) "テスト3"
}
[3]=> array(3) {
["id"]=> string(1) "4"
["size"]=> string(5) "400"
["message"]=> string(7) "テスト4"
}
[4]=> array(3) {
["id"]=> string(1) "5"
["size"]=> string(4) "500"
["message"]=> string(7) "テスト5"
}
[5]=> array(3) {
["id"]=> string(1) "6"
["size"]=> string(5) "600"
["message"]=> string(7) "テスト6"
}
}

foreach ($data as $key => $val) {



}

となっております。foreachでループさせたときにidの降順?(1→6に表示)になるのですが、sortで昇順?(6→1に表示)にしたいです。
お分かりの方がいらっしゃいましたらお願いいたします。

A 回答 (5件)

他の方の回答に対して補足します。



>>idはなるべくならstringよりintで持った方がいいですよ

そうですね。
stringを採用するメリットがあるのは、32ビットシステムで非常に大きな整数を扱う必要があるときぐらいです。
intを採用する場合はintval関数を通す必要はもちろんありません。

function func($a,$b){
if($a['id']===$b['id']) return 0;
if(intval($a['id']) < intval($b['id'])) return 1;
return -1;
}



function func($a,$b){
return intval($b['id']) - intval($a['id']);
}

ってどっちが一般的なんでしょうか?
個人的には後者の方がすっきりしてて好きなんですが…

この回答への補足

ご回答有難う御座います。

>そうですね。
>stringを採用するメリットがあるのは、32ビットシステムで非常に大きな整数を扱う必要があるときぐらいです。
>intを採用する場合はintval関数を通す必要はもちろんありません。

No.4の方でも回答させていただいておりますが、受け取ったデータが表記の配列になります。

ソートの方はできました。
有難う御座いました!

補足日時:2013/05/09 01:01
    • good
    • 0

idはなるべくならstringよりintで持った方がいいですよ


idの性質上ユニークだとは思いますが、ダブったことも考えるとやはり
return 0も設定しておきたいところです

<?PHP
$a=array(
array("id"=> "1","size"=> "100","message"=> "テスト1")
,array("id"=> "2","size"=> "200","message"=> "テスト2")
,array("id"=> "3","size"=> "300","message"=> "テスト3")
,array("id"=> "4","size"=> "400","message"=> "テスト4")
,array("id"=> "5","size"=> "500","message"=> "テスト5")
,array("id"=> "6","size"=> "600","message"=> "テスト6")
);
function mysort($a,$b){
if($a["id"]===$b["id"]) return 0;
if(intval($a["id"]) < intval($b["id"])) return 1;
return -1;
}

usort($a,"mysort");
print_r($a);

この回答への補足

回答が遅くなり申し訳ありません。

>idはなるべくならstringよりintで持った方がいいですよ
受け取ったデータがstringなんです・・・

有難う御座いました!

補足日時:2013/05/09 00:59
    • good
    • 0

>>となっております。

foreachでループさせたときにidの降順?(1→6に表示)になるのですが、sortで昇順?(6→1に表示)にしたいです。
>>お分かりの方がいらっしゃいましたらお願いいたします。

すいません、ここ見落としてましたww
申し訳ないです…


>>降順?(1→6に表示) → これは昇順です
>>sortで昇順?(6→1に表示) → これは降順です

先ほどのコードはsizeで昇順ソートしてます。

idで降順ソートするならこうですかね。
http://ideone.com/liPvUD

この回答への補足

回答が遅くなり申し訳ありません。

参考サイトにてソートができました。
有難う御座いました!

補足日時:2013/05/09 00:57
    • good
    • 0

「何で」は「どうして」じゃなくて「何をもとに」っていう意味だったんですけどww



uksortじゃなくてusortでしたね。失礼しました。
「多次元配列のキー」は親配列からすれば「キー」ではなく単なる「値」ですもんね。

http://ideone.com/J3v3ID
    • good
    • 0

何でソートしたいんですか?



まあ候補として上がるのはarray_multisort関数かuksort関数ですよね。(定番)

この回答への補足

ご回答有難う御座います。

>何でソートしたいんですか?
表示順の変更をしたいのです。

>まあ候補として上がるのはarray_multisort関数かuksort関数ですよね。
両方とも試したのですが、うまくいかず困っています。

補足日時:2013/05/08 01:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!