2012-08-29 8 views
13

PHP 5.4では、他の検索の大文字小文字を区別しないために便利なSORT_FLAG_CASEが導入されています。残念ながら、これはPHP 5.3以下では使用できませんので、私は次の配列がどのように思っていた:PHP 5.3以降の配列の大文字と小文字を区別しないキーの並べ替え

array('a'=>2,'b'=>4,'A'=>1,'B'=>3); 

に分類することでした。いつものksort()機能として

array('A'=>1,'a'=>2,'B'=>3,'b'=>4); 

としてそれを並べ替え:

array('A'=>1,'B'=>3,'a'=>2,'b'=>4); 
+0

私は」することができます投稿後2日までそれを受け入れないでください。 – M1ke

+0

さて、私はそれを忘れてしまったので、1日で思い出させてください;) – hakre

+0

もちろん、問題ありません。 – M1ke

答えて

23

PHP関数リファレンスページの1つにコメントしたところで、uksort()関数を指摘しました。これ(およびキーの代わりに値でソートする機能)を使用すると、クイックソートをシフトするための比較アルゴリズムをユーザーが書き込むことができます。

は非常に単純なstrcasecmp()機能と組み合わせる(2つの文字列を比較し、用> B> 0のため< 0を返す> b)は、あなたに与えます:

uksort($array, 'strcasecmp'); 

やすいの効果を達成するために:

ksort($array,SORT_STRING | SORT_FLAG_CASE); 

PHP 5.3以降。独自のソート関数を作成する必要がPHP 5.3の場合

uksort($myarray, function ($a, $b) { 
    $a = mb_strtolower($a); 
    $b = mb_strtolower($b); 
    return strcmp($a, $b); 
}); 

+3

イエス様、どうやってこのような不正な仕分けシステムができますか?そして、ドキュメントによると:sort($ words、SORT_STRING | SORT_FLAG_CASE);大文字小文字を区別しない値の並べ替えを行うべきですが、うまくいきません: – 7stud

+0

このパラメータは動作しますが、PHP 5.4でのみ動作します。 PHPには年齢や使用方法から多くの欠陥がありますが、最近のアップデートは実際には言語の一貫性を強化し、他の言語が慣れ親しんだ機能を提供することに焦点を当てています。 – M1ke

+0

uksort($ array、 'strcasecmp')をどのように変更しますか?逆順でソートするには? – Flion

1

これは私が(大文字と小文字を区別しない)でソートしているかであるPHP 7でUTF8文字列の配列

function mySort1($a, $b) { 
    $a = mb_strtolower($a); 
    $b = mb_strtolower($b); 
    return strcmp($a, $b); 
} 
uksort($result['rows'], 'mySort1'); 
関連する問題