[PHP-users 25826] ユーザー関数にてソート

立松 聖久 tatemax @ kagoya.net
2005年 6月 14日 (火) 15:21:39 JST


初めまして立松です。
初の投稿になります。よろしくお願いします。

わからないことが有りどなたかお知恵を貸して下さい。

PHP:4.3.11
OS :redhat9
Apache2.0.54

件名の通りユーザー関数を使ってソートをかけたいと思います。

要素でソーティングしたい配列(実際は要素が数百あります)
$text[0] => 2005060101.txt
$text[1] => 2005060102.txt
$text[2] => 2005060201.txt
$text[3] => 2005060202.txt
$text[4] => 2005060301.txt
$text[5] => 2005060302.txt

希望する結果
$text[0] => 2005060301.txt
$text[1] => 2005060302.txt
$text[2] => 2005060201.txt
$text[3] => 2005060202.txt
$text[4] => 2005060101.txt
$text[5] => 2005060102.txt

要するに要素の頭8桁は降順、9桁目から10桁目は昇順に
並べたいのです。

function txt_sort($a, $b) {
  $a_date = substr($a, 0, 8);
  $b_date = substr($b, 0, 8);

  $a_id = substr($a, 8, 2);
  $b_id = substr($b, 8, 2);

*この後が私のマニュアル読解力では続かないですが一応。
  if ($a_date < $b_date and $a_id > $b_id) {
    return 1;
  }
  if ($a_date > $b_date and $a_id < $b_id) {
    return -1;
  }
  if ($a == $b)
    return 0;
}

usort($text, txt_sort);

これだとなんだか規則性のない並び方になってしまいました。
手元には、PHP500の極意やWebアプリケーションスーパーサンプル
など数冊ありますがどれも詳しい例が載っていないのでお手上げです。
PHPMLもかなりしつこく探したのですが、複雑すぎるUSORTの例しかなく
サッパリでした。

以上よろしくお願いします。


PHP-users メーリングリストの案内