获得前N个元素,但如果N + 1等于N,则返回N + 1

时间:2013-09-22 15:16:18

标签: php arrays

我有关联数组如下:

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);

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

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

2 个答案:

答案 0 :(得分: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个,然后继续迭代直到当前元素不等于最后一个元素

答案 1 :(得分: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);