3

次の配列があります。

配列 ( [ 20] => 154 [ 21] => 146 [ 24] => 230 [ 26] => 80 [ 33] => 232 [ 113] => 100 [ 13] => 132 [ 12] => 146 [ 11] => 122 [ 235] => 110 [ 239] => 54 [ 248] => 162 [ 340] => 84 [ 352] => 76 [ 323] => 146 [ 247] => 96 [ 372 ] => 150 [ 370] => 128 )

この配列から上位 5 つの値を取得できる必要があります

最終結果は次のようになります。

Array(
     [ 33] => 232
     [ 24] => 230
     [ 248] => 162
     [ 20] => 154
     [ 372] => 150
)

配列を並べ替えるだけでこれを実行できる場合は、問題ありません。

4

3 に答える 3

11

これを試してください。配列を降順でソートし、最初の 5 つの値で配列をスライスします

rsort($arr);

print_r(array_slice($arr, 0 ,5));
于 2013-01-10T05:43:52.487 に答える
8

PHP の を使用rsort()すると、配列を降順に並べ替えることができます。最初の 5 つの要素が最大です。

rsort($data);
$highest = $data[0];
$second_highest = $data[1];
$third_highest = $data[2];
$fourth_highest = $data[3];
$fifth_highest = $data[4];

array_slice()また、(上記のように個別の変数を使用する代わりに) 並べ替え後に上位 5 個を独自の配列にストリップするために使用することもできます。

rsort($data);
$highest_five = array_slice($data, 0, 5);

このアプローチには 2 つの注意点があります。1 つ目は、array-parameter が元の配列への参照であるため、元の配列が並べ替えられることです (最初にコピーを作成してコピーを並べ替えない限り)。2 つ目は、最初のインデックスが index 、など0として開始されたかどうかに関係なく、配列のインデックスを再作成することです。3356

UPDATE (インデックス値の維持)
配列の再インデックスを解決するには、代わりに を使用できますarsort()。これは上記と同じように実行されますが、キーは から始まるようにリセットされません0。同じように、4 番目のオプションパラメータを使用して、array_slice()キーをリセットするため、「キーを保持する」ように指定する必要があります。全体として、次を使用して、上位 5 つの値を新しい配列に取得できます。

arsort($data);
$highest_five = array_slice($data, 0, 5, true);
于 2013-01-10T05:44:17.650 に答える
7

配列の並べ替えはソートと呼ばれ、取得できる「最速」の操作時間は O(nlog(n)) です。ここで、n は配列内の要素の数です。

リストを反復処理して最大 5 つのリストを保持する方が高速 (O(n)) です。

于 2013-01-10T05:41:30.593 に答える