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

2 回答 2

2

最好的办法是获取前三个元素,然后遍历其余元素,检查下一个元素是否等于最后一个元素。如果是,则抓住它,否则停止迭代。

像这样的东西应该工作:

$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 回答
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 回答