[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 メーリングリストの案内