[PHP-users 25827] Re: ユーザー関数にてソート

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2005年 6月 14日 (火) 16:11:52 JST


こんにちわ、桝形です。

誤って該当メールを削除してしまったのでスレッド切れてます。
スミマセン。


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

このデータで、


> 要するに要素の頭8桁は降順、9桁目から10桁目は昇順に
> 並べたいのです。
> 
>   if ($a_date < $b_date and $a_id > $b_id) {
>     return 1;
>   }

比較データが[20050602][01]と[20050602][02]の時にどういう動作を
するのかをよく考えてみて下さい。そうすれば分かるのかと。。。


>   if ($a_date > $b_date and $a_id < $b_id) {
>     return -1;
>   }

最初の「$a_date > $b_date and」で既に条件に一致していません。


ロジックをよく見てみると、どのif文にも該当していない事がわかると
思います。ですので出現順に並んでいるのだと思います。

  if ($a_id < $b_id ) {
    return -1;
  }

  if ($a_id > $b_id ) {
    return 1;
  }

みたいな感じで後ろのデータを比較する処理を最後に追加してみると
どうでしょうか?

後、配列データの長さが固定である事が前提になっているので可変に
なっている場合は、

if ($a == $b)

を

if (substr($a,0,8) == substr($b,0,8))


にした方がよいかもしれません。

-- 
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>



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