- ベストアンサー
2次元配列のソート
環境PHP5.0.4 現在下記のような物が複数あるので、 これを名前順にfor文などを使い ソートしたいのですがうまくいきません、 どうすればよいでしょうか? ID 名前 年齢 1 た 20 2 さ 15 3 き 30 表示したい結果 ID 名前 年齢 3 き 30 2 さ 15 1 た 20
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
usortはオブジェクトでなくても使えますよ~。 てことで、 function compare_name( $a, $b ){ return strcmp( $a[1], $b[1] ); } という関数を定義して(関数名は適当に変えて下さい)、 usort( $value, "compare_name" ); を呼べば、大丈夫だと思います。
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
配列じゃなくてオブジェクトにする方法もあります。 <?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というのがデータベースからの値ならデータベース側でソートした方が早いですが。
お礼
有難う御座いました。 なんとなく出来そうですが、 自分にはちょっと難しいですね、 やっぱり、order byでやるのが、一番簡単なんですけども、鯖の環境が変わって困っております。
- vivid8_tihiro
- ベストアンサー率13% (9/65)
こんな感じは? $aが格納されている配列。 $hoji_sort = ""; foreach ($a as $tmp) { $hoji_sort[$tmp['name'].'_'.$tmp['id']] = tmp; } ksort($hoji_sort); foreach ($hoji_sort as $tmp) { この中で取得処理。 } IDは一意ですよね?
お礼
有難う御座いました。
- kusukusu
- ベストアンサー率38% (141/363)
ようは、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); こんな感じですか?
補足
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]; }
お礼
これです!、配列結果の後に、挿入するだけで、 簡単に出来ました。 satoh様、有難う御座いました。<(_ _)>