• ベストアンサー

2次元配列のソート

環境PHP5.0.4 現在下記のような物が複数あるので、 これを名前順にfor文などを使い ソートしたいのですがうまくいきません、 どうすればよいでしょうか? ID 名前 年齢 1  た  20 2  さ  15 3  き  30 表示したい結果 ID 名前 年齢 3  き  30 2  さ  15 1  た  20

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

  • ベストアンサー
  • satoh
  • ベストアンサー率77% (17/22)
回答No.4

usortはオブジェクトでなくても使えますよ~。 てことで、 function compare_name( $a, $b ){ return strcmp( $a[1], $b[1] ); } という関数を定義して(関数名は適当に変えて下さい)、 usort( $value, "compare_name" ); を呼べば、大丈夫だと思います。

sunybu_2005
質問者

お礼

これです!、配列結果の後に、挿入するだけで、 簡単に出来ました。 satoh様、有難う御座いました。<(_ _)>

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

配列じゃなくてオブジェクトにする方法もあります。 <?php class person { public $id; public $name; public $age; function __construct ($id1, $name1, $age1) { $this->id = $id1; $this->name = $name1; $this->age = $age1; } } $array_person_object = array(); $array_person_object[] = new person("1", "た", "20"); $array_person_object[] = new person("2", "さ", "15"); $array_person_object[] = new person("3", "き", "30"); function name_sort($a, $b) { return ($a->name - $b->name); } print_r($array_person_object); echo "\n"; usort($array_person_object, "name_sort"); print_r($array_person_object); ?> $rowというのがデータベースからの値ならデータベース側でソートした方が早いですが。

sunybu_2005
質問者

お礼

有難う御座いました。 なんとなく出来そうですが、 自分にはちょっと難しいですね、 やっぱり、order byでやるのが、一番簡単なんですけども、鯖の環境が変わって困っております。

回答No.2

こんな感じは? $aが格納されている配列。 $hoji_sort = ""; foreach ($a as $tmp) { $hoji_sort[$tmp['name'].'_'.$tmp['id']] = tmp; } ksort($hoji_sort); foreach ($hoji_sort as $tmp) { この中で取得処理。 } IDは一意ですよね?

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k08.htm
sunybu_2005
質問者

お礼

有難う御座いました。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

ようは、ID降順にソートしたいと言うことでしょうか? $a=array(array("1","た","20"),array("2","さ","15"),array("3","き,","30")); function sort_by_id($p1,$p2) { return($p2[0]-$p1[0]); } usort($a,"sort_by_id"); print_r($a); こんな感じですか?

sunybu_2005
質問者

補足

kusukusu様、有難う御座いました。 名前を基準にあ~並べたいのですが、asortを使うと 普通の配列なら、出来るのですが、 2次元だといま1つ分からなくて・・・ 現在下記のような感じで、配列に格納しておりますので、 これをどうにか、したいので、よろしくお願いいたします。 for ($a=0;$a<10;$a++){ $value[$a][0] = $row[id]; $value[$a][1] = $row[name]; $value[$a][2] = $row[age]; }

関連するQ&A