• ベストアンサー

【PHP】 sort() で大文字小文字を同一視できませんか?

PHP5使用者です。 sort() でソートすると、並び順は A B C … a b c … となります。 そうではなく A a B b C c …  とか a A b B c C … にしたいのですがどうすればいいのでしょうか。 お詳しい方、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>大文字小文字の優劣が不規則なんですね。 同一視したいのではなかったのですか? 順序付けをしたければusortの比較ルーチンで文字列の先頭からi文字ずつ(最初はi=1)「uppercaseした文字列で比較→同一ならそのままの文字列を比較→そこまで同一ならi(比較文字列の長さ)を+1して」をLoop(文字列の長いほうを超えるまで)して比較していくしかないですけど。

ikataro
質問者

お礼

なるほど… やりたいことは単純そうでもけっこう大がかりなのですね 研究してみます。ありがとうございました。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

natsortの並びで問題ないようならnatcasesortがあります。   http://www.php.net/manual/ja/function.natcasesort.php

ikataro
質問者

お礼

うーん natcasesort() も No.1 さんのと同じく、大文字小文字の優劣が不規則なんですね。 ありがとうございました。

回答No.1

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関数の中で一工夫すると良いんじゃないかと思います。

ikataro
質問者

お礼

なるほど。ありがとうございます。 そのままだと 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  といった具合に大文字小文字の優劣がなんとも不規則なんですね。 もうちょっと研究してみます。

関連するQ&A

専門家に質問してみよう