我有如下关联数组:
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,
);数组已经排序了,我不知道键名。我想得到前三要素。但很简单:
array_slice($array, 0, 3);在我的情况下不能工作,因为第四个和第五个元素也应该返回。
有没有内置的函数,或者我应该从头开始写?我认为这应该是一些递归函数来检查连续的元素。
发布于 2013-09-22 15:37:16
也许这就是你想做的。获取最上面的元素值,然后将它们与数组相交以保留键。
// 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-22 15:21:30
您最好的选择是获取前三位,然后对其余部分进行迭代,检查下一个元素是否等于最后一个元素。如果是的话,抓住它,否则就停止迭代。
像这样的事情应该有效:
$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,然后继续迭代,直到当前元素不等于最后一个元素为止。
https://stackoverflow.com/questions/18945355
复制相似问题