0

次のような連想配列があります。

array(
    [random_key_1] => 30,
    [random_key_2] => 27,
    [random_key_3] => 25,
    [random_key_4] => 25,
    [random_key_5] => 25,
    [random_key_6] => 22,
);

配列は既にソートされており、キー名がわかりません。上位3つの要素を取得したいと思います。しかし単純です:

array_slice($array, 0, 3);

4番目と5番目の要素も返される必要があるため、私の場合は機能しません。

組み込み関数はありますか、それともゼロから作成する必要がありますか? これは、連続する要素をチェックするための再帰関数であるべきだと思います。

4

2 に答える 2

2

多分これはあなたがしたいことです。最上位の要素の値を取得し、それらを配列と交差させてキーを保持します。

// gets the unique top 3 values
$top_values = array_slice(array_unique($array), 0, 3);
// intersects the original array with the top 3 values
$top_values_with_keys_and_duplicates = array_intersect($array, $top_values);
于 2013-09-22T15:37:16.853 に答える
2

あなたの最善の策は、上位 3 つを取得し、残りを繰り返し処理して、次の要素が最後の要素と等しいかどうかを確認することです。ある場合はそれを取得し、そうでない場合は反復を停止します。

このようなものが動作するはずです:

$top = array_slice($array, 0, 3);
foreach( array_slice( $array, 4) as $el) {
    if( $el === $top[2]) {
        $top[] = $el;
    } else {
        break;
    }
}

reset()配列ポインタを,current()で使用しnext()て上位 3 つを取得し、現在の要素が最後の要素と等しくなくなるまで反復を続けることもできることに注意してください。

于 2013-09-22T15:21:30.220 に答える