3

私はこのような配列を持っています:

$array = array(
   [1]=>'something',
   [0.2]=>'something',
   [0.1]=>'something',
   [0.3]=>'something',
   [0.10]=>'something'
);

今、私はこの配列をキーでソートしたいので、そのためにこのコードを使用しています:

uksort($array, 'strnatcasecmp');

上記のコードは正常に動作しますが、唯一の問題は、結果を逆にしたいということです。この目的のためkrsortに、 、array_reversersortafteruksortを使用しましたが、それらはすべてuksortの結果を変更します。

この配列をキーで自然な順序で並べ替えて、結果を逆にすることはできますか?

私が欲しいものは次のようになります:

$array = array(
   [1]=>'something',
   [0.10]=>'something',
   [0.3]=>'something',
   [0.2]=>'something',
   [0.1]=>'something'
);
4

4 に答える 4

10

これを試して:

uksort($array, create_function('$a,$b', 'return -strnatcasecmp($a,$b);'));

すでに uksort (ユーザー関数定義の並べ替え) のバリアントを使用しているため、このバージョンは比較関数の結果を反転することで順序を逆にするだけです。私はそれがあなたのために働くべきだと思います。

または、これを試してください:

uksort($array, 'strnatcasecmp');
$array = array_reverse($array, true);

trueキーを保持するパラメーターに注意してください。

create_function非推奨であるため、最新の PHP バージョンの更新:

uksort($array, function ($a, $b) { return -strnatcasecmp($a, $b); });

新しい構文による PHP 7.4 の更新(執筆時点ではリリースされていません):

uksort($array, fn($a, $b) => -strnatcasecmp($a, $b));
于 2012-10-09T17:14:54.017 に答える
0

私はphpプログラマーではありませんが、

http://www.php.net/manual/en/function.uksort.php

比較のために独自のコールバック関数を作成し、必要に応じて並べ替えることができるはずです。

于 2012-10-09T17:15:02.303 に答える
0

asort()キーでソートし、キーでarsort()ソートして順序を逆にします。

于 2012-10-09T17:23:15.837 に答える
0

PHP 4+ の場合、krsortを使用できます。

krsort($array, SORT_NATURAL | SORT_FLAG_CASE);

私にはよりシンプルに見え、それは と同じように機能しstrnatcasecmp()ます。大文字と小文字を区別したくない場合は、SORT_FLAG_CASEフラグを削除してください。

于 2016-08-16T19:59:18.487 に答える