首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取顶N元素,但如果N+1等于N,则还返回N+1

获取顶N元素,但如果N+1等于N,则还返回N+1
EN

Stack Overflow用户
提问于 2013-09-22 15:16:17
回答 2查看 40关注 0票数 0

我有如下关联数组:

代码语言:javascript
复制
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,
);

数组已经排序了,我不知道键名。我想得到前三要素。但很简单:

代码语言:javascript
复制
array_slice($array, 0, 3);

在我的情况下不能工作,因为第四个和第五个元素也应该返回。

有没有内置的函数,或者我应该从头开始写?我认为这应该是一些递归函数来检查连续的元素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-22 15:37:16

也许这就是你想做的。获取最上面的元素值,然后将它们与数组相交以保留键。

代码语言:javascript
复制
// 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);
票数 2
EN

Stack Overflow用户

发布于 2013-09-22 15:21:30

您最好的选择是获取前三位,然后对其余部分进行迭代,检查下一个元素是否等于最后一个元素。如果是的话,抓住它,否则就停止迭代。

像这样的事情应该有效:

代码语言:javascript
复制
$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,然后继续迭代,直到当前元素不等于最后一个元素为止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18945355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档