PHPの連想記憶配列(2次元)のソート方法はありませんか?


list[0][’name’]=’hoge’;
list[0][’age’]=18;
list[0][’sex’]=0;
list[1][’name’]=’foo’;
list[1][’age’]=20;
list[1][’sex’]=1;
    :
    :
list[x][’name’]=’...’;
list[x][’age’]=...;
list[x][’sex’]=...;

のような場合に、ageやnameをキーに添え字の0〜xをソートしたいです。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k08.htm
は見ていますが、キー指定の2次元配列のソートは無かったので質問します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/09 17:11:37
  • 終了:--

回答(2件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/02/09 17:17:34

ポイント20pt

僕もあまり使ったことがないんで自信なしですが、これ、使えませんか?

id:P-mako

ちょうど自分でも今、同じページを見ていました。

使い方が、ちょっとエラー&トライになりそうですが、使えそうな気はします。

質問の例のケースで意図したとおりにソートできるサンプルを提示いただければ、ポイント多めに配分させていただきます。

2006/02/09 17:36:41
id:typista No.2

typista回答回数359ベストアンサー獲得回数72006/02/09 17:35:35

ポイント40pt

下記のようなソートをすれば上手くいくと思います。

nameでソートしたければ、コメントを外してください。2つのキーでソートしたければ、参考ページのようにarray_multisortに2つのキーを指定することになります。

その場合は、$sort_keyは、$sort_key1、$sort_key2などが良いでしょう。

---

foreach ($list as $key => $row) {

// $sort_key[$key] = $row[’name’];

$sort_key[$key] = $row[’age’];

}

//array_multisort( $sort_key, SORT_DESC, $list );

array_multisort( $sort_key, SORT_ASC, $list );

id:P-mako

なるほど。ソートできました。そういうことだったんですね。

ありがとうございました。

2006/02/09 17:37:32
  • id:Kumappus
    より汎用的には

    usort()が使えそうです。

    http://jp2.php.net/usort
  • id:P-mako
    Re:より汎用的には

    コールバックファンクションを指定できるんですね。
    その昔、C言語でそういう手法を使ったことがありますが、ソートについては、true/falseしか返せないので、ちょっと難しいような気がします。(汎用的とはそういうもんでしょうね)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません