任意 - php 多次元配列 ソート



PHPバージョン5.3以下での大文字と小文字を区別しない配列ソート (2)

PHP 5.4では、他の検索で大文字と小文字を区別しないようにするための便利なSORT_FLAG_CASEが導入されました。 残念ながら、これはPHP 5.3以下では利用できません。そのため、次の配列がどうなるのか疑問に思いました。

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

に分類することができます:

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

通常のksort()関数はそれを以下のようにソートします。

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

https://ffff65535.com


PHP関数のリファレンスページの1つについてのコメントで、 uksort()関数をuksort()ていました。 これ(およびキーではなく値でソートするためのuasort()関数)を使用すると、クイックソートをシフトするための比較アルゴリズムをユーザーが作成できます。

これを非常に単純なstrcasecmp()関数(2つのストリングを比較して、a> bの場合は<0、a> bの場合は> 0を返すstrcasecmp()と組み合わせると、次のようになります。

uksort($array, 'strcasecmp');

以下の効果を簡単に達成するために:

ksort($array,SORT_STRING | SORT_FLAG_CASE);

PHP 5.3以下で。


これは私がPHP 7でutf8文字列の(大文字と小文字を区別しない)配列をソートした方法です:

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

PHP 5.3では、独自のソート関数を作成する必要があります。

function mySort1($a, $b) {
  $a = mb_strtolower($a);
  $b = mb_strtolower($b);
  return strcmp($a, $b);
}
uksort($result['rows'], 'mySort1');




sorting