dポイントプレゼントキャンペーン実施中!

環境PHP5.0.4

現在下記のような物が複数あるので、
これを名前順にfor文などを使い
ソートしたいのですがうまくいきません、
どうすればよいでしょうか?

ID 名前 年齢
1  た  20
2  さ  15
3  き  30

表示したい結果
ID 名前 年齢
3  き  30
2  さ  15
1  た  20

A 回答 (4件)

usortはオブジェクトでなくても使えますよ~。


てことで、

function compare_name( $a, $b ){
return strcmp( $a[1], $b[1] );
}

という関数を定義して(関数名は適当に変えて下さい)、

usort( $value, "compare_name" );

を呼べば、大丈夫だと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/09 09:29

配列じゃなくてオブジェクトにする方法もあります。


<?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というのがデータベースからの値ならデータベース側でソートした方が早いですが。
    • good
    • 0
この回答へのお礼

有難う御座いました。
なんとなく出来そうですが、
自分にはちょっと難しいですね、

やっぱり、order byでやるのが、一番簡単なんですけども、鯖の環境が変わって困っております。

お礼日時:2005/11/08 19:38

こんな感じは?


$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 …
    • good
    • 0
この回答へのお礼

有難う御座いました。

お礼日時:2005/11/08 19:36

ようは、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];
}

補足日時:2005/11/08 15:38
    • good
    • 0

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