PHP:配列の値をアルファベット順に並べ替える方法は?

algorithm performance php sorting
PHP:配列の値をアルファベット順に並べ替える方法は?

PHPで配列の値をアルファベット順に並べ替えたい。 すべての値が同じ文字で始まっている場合、2番目の文字などを使用してソートする必要があります。 大文字と小文字を区別します。

例えば:

before:
values[0] = "programming";
values[1] = "Stackoverflow";
values[2] = "question";
values[3] = "answers";
values[4] = "AA Systems";

after:
values[0] = "AA Systems";
values[1] = "answers";
values[2] = "programming";
values[3] = "question";
values[4] = "Stackoverflow";

いくつかのアルゴリズムを見つけましたが、高速で少数のステートメントを使用する方法が必要です。 大文字と小文字を区別しないことは私にとって特別なことです。 ありがとう。

  10  2


ベストアンサー

See

  • natcasesort:http://www.php.net/manual/en/function.natcasesort.php

  • usort:http://www.php.net/manual/en/function.usort.phpと
    `strtolower(a)`と `strtolower(b)`を比較するコンパレータ関数。

14


あなたの例は2つの仮定をします:

  1. 単純な1次元配列のみを扱っていること。

  2. アルファベット順にソートした後、インデックスが更新され、
    最初の要素には、アルファベット順にキー0などが割り当てられます。

これらのパラメーターを指定すると、最も簡単な解決策は配列メソッド `sort()`を使用することです。 あなたの例では:

$values[0] = "programming";
$values[1] = "Stackoverflow";
$values[2] = "question";
$values[3] = "answers";
$values[4] = "AA Systems";

sort($values);

次の結果になります。

Array {
     [0] => AA Systems
     [1] => Stackoverflow
     [2] => answers
     [3] => programming
     [4] => question
}

より適切なhttp://us2.php.net/manual/en/array.sorting.php [その他の配列ソート関数]があります。 たとえば、上記で使用した単純なものは、大文字を小文字の前に置きます。したがって、アイテムとして「セキュリティ」(すべて小文字)がある場合、大文字の s `は se`対よりも優先されます。 「st」。 大文字と小文字を区別せずに並べ替えるには、http://www.php.net/manual/en/function.natcasesort.php [natcasesort()]を使用できます。これにより、指定された配列で以下が生成されます。

Array {
     [0] => AA Systems
     [1] => answers
     [2] => programming
     [3] => question
     [4] => Stackoverflow
}

5


バージョン5.4.0では、 sort、` asort`、 `ksort`などのいずれかを使用できます。 関数と `SORT_FLAG_CASE`フラグを渡します。

sort( $array, SORT_FLAG_CASE );  // Non-associative array
asort( $array, SORT_FLAG_CASE ); // Associative array
ksort( $array, SORT_FLAG_CASE ); // Associative array, sort by indices

古いバージョンを使用していて、更新する準備ができていない(またはできない)場合は、他の人が言及したように natcasesort`を使用できますが、 strcasecmp`がカスタム関数:

natcasesort( $array );          // Non-associative array
uasort( $array, 'strcasecmp' ); // Associative array
uksort( $array, 'strcasecmp' ); // Associative array, sort by indices

同じ概念を他のhttp://www.php.net/manual/en/array.sorting.php[sorting functions]のいずれにも適用できます。

4


`uasort()`を使用できます:http://php.net/manual/en/function.uasort.php

uasort( $arr, 'strcasecmp' );

2番目の引数は、値を比較する関数です。 関数は、-1、0、または1を返す必要があります。 カスタム関数に使用できるテンプレートを次に示します。

function cmp( $a, $b ) {
  if ( $a == $b ) return 0;
  elseif ( $a > $b ) return 1;
  elseif ( $a < $b ) return -1;
}

uasort( $arr, 'cmp' );

ソート後、配列インデックスをリセットすることができます。

$arr = array_values( $arr );

0


タイトルとURLをコピーしました