• ベストアンサー

同形式の異なる複数の配列を、ある要素を基準に並べ替えたい。

PHP4で動作可能なものでお願いします。 ary1 = ("りんご","果物",38); ary2 = ("ごりら","動物",17); ary3 = ("らっぱ","楽器",4); ary4 = ("パイナップル","果物",2); ary5 = ("ルビー","宝石",4); ary6 = ("イルカ","動物",12); 上記の6つの配列を、第3要素(数値)を基準に降順にソートしたい場合、どのような方法が考えられますか。 方法が複数考えられる場合には、最も処理が速いと思われるものを教えて下さい。(余裕がありましたら、もしあればですが、複数の方法をそれぞれ記載頂けると嬉しいです。^^) どうぞ、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

#1さんの回答とほぼ同じですが、質問の提示で配列の表現が 分かりにくいので、まとめるとこういうことです。 <? $ary=Array( Array("りんご","果物",38) ,Array("ごりら","動物",17) ,Array("らっぱ","楽器",4) ,Array("パイナップル","果物",2) ,Array("ルビー","宝石",4) ,Array("イルカ","動物",12) ); usort($ary,"hoge1"); print "<pre>"; print_r($ary); print "</pre>"; function hoge1($a,$b){ return $a[2]==$b[2]?0:($a[2]>$b[2]?1:-1); } ?>

march4
質問者

お礼

スクリプトが上手くいきましたので、お約束通り、ご報告致します。 このusort()を知る前は、配列の中に配列を入れるような形ではなく、 配列の中に文字列を入れて処理する方法で対処していました。 つまりですね、、、 $ary=Array( Array("りんご","果物",38) ,Array("ごりら","動物",17) ,Array("らっぱ","楽器",4) ,Array("パイナップル","果物",2) ,Array("ルビー","宝石",4) ,Array("イルカ","動物",12) ); これは、次のような書き方になります。 $ary=Array( "@@38@@りんご果物" ,"@@17@@ごりら動物") ,"@@4@@らっぱ楽器") ,"@@2@@パイナップル果物") ,"@@4@@ルビー宝石") ,"@@12@@イルカ動物") ); で、「@@●@@」の部分に着目して、配列の中身をnatsort();で並べ替え、、、最後に、余分な「@@」をereg_replace()で削除して、、、みたいなことをしていました。(苦笑) 配列の中に配列を入れて処理する方法を知ったとき、 今までの方法がアホらしいことに気づき、今回、このような質問に至りました。 そして、良き回答を得ることが出来ました。 皆様のおかげです。 ちなみに、microtime();にて、処理速度の比較をしてみました。 これまでの方法(@@使用):0.00922 新しい方法(usort();使用):0.006641 ちょっとだけですけど、速くなってますよね。(笑) これで遅くなってたら泣けますからっ! ということで、回答をそろそろ締め切らせて頂こうかと思いますw 皆様、どうもありがとうございました。

march4
質問者

補足

わざわざ補足して下さり、助かります~。(笑) そうなんです! 多次元配列として書くべきでした! ご指摘頂き、助かります。 次に、<pre>の使用。 これも、忘れていて、あ~、それあると見やすくなるんだった~。 と、1人喜んでました。本題とは直接関係ありませんが。。(笑) そして、最後のreturnの所で、すごい書き方だなぁ~と感心してしまいました。 ifのネストではなく、三項演算子のネスト?のような技があるんですね。(笑) 大変勉強になりました! 現在、このusort()で動作確認をしているところです! 今のところ、イイ感じに進んでいますので、完了しましたらご報告いたします! 含蓄ある回答をありがとうございました。

その他の回答 (1)

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

usortがおすすめ function hoge1($a,$b){ retune $a[2]-$b[2]; } usort($ary1,"hoge1"); このソートは呼び出す関数一つでかなり自由に設定が変えれるので、いろいろ試してみるといいですよ 詳しくはマニュアル参照

march4
質問者

お礼

ありがとうございました(^^) また何かありましたら、教えて下さいね。

march4
質問者

補足

御礼を言い忘れておりました。すみません。^^; usort、これいいですね^^ 早速、勉強させて頂きました! 有益な回答をありがとうございました。^^

関連するQ&A