我有关联数组如下:
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);
在我的情况下不起作用,因为第四和第五个元素也应该返回。
是否有内置功能或者我应该从头开始编写它?我认为这应该是一些检查连续元素的递归函数。
答案 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);