- ベストアンサー
【PHP】 sort() で大文字小文字を同一視できませんか?
PHP5使用者です。 sort() でソートすると、並び順は A B C … a b c … となります。 そうではなく A a B b C c … とか a A b B c C … にしたいのですがどうすればいいのでしょうか。 お詳しい方、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>大文字小文字の優劣が不規則なんですね。 同一視したいのではなかったのですか? 順序付けをしたければusortの比較ルーチンで文字列の先頭からi文字ずつ(最初はi=1)「uppercaseした文字列で比較→同一ならそのままの文字列を比較→そこまで同一ならi(比較文字列の長さ)を+1して」をLoop(文字列の長いほうを超えるまで)して比較していくしかないですけど。
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
natsortの並びで問題ないようならnatcasesortがあります。 http://www.php.net/manual/ja/function.natcasesort.php
お礼
うーん natcasesort() も No.1 さんのと同じく、大文字小文字の優劣が不規則なんですね。 ありがとうございました。
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
usortを使ってあげるといいんじゃないですかね? function cmp($a, $b) { return strcasecmp($a, $b); } $arr = array('A','b','a','B','c','d','C','D'); usort($arr, "cmp"); こんな感じでしょうか。 Aとaなど、同じ文字の大文字、小文字で優劣を付けたい場合はcmp関数の中で一工夫すると良いんじゃないかと思います。
お礼
なるほど。ありがとうございます。 そのままだと E b a 1 A B 01 d c D C e 99 11 ↓ 01 1 11 99 A a b B C c d D E e といった具合に大文字小文字の優劣がなんとも不規則なんですね。 もうちょっと研究してみます。
お礼
なるほど… やりたいことは単純そうでもけっこう大がかりなのですね 研究してみます。ありがとうございました。