【发布时间】:2013-10-24 16:29:15
【问题描述】:
给定以下数组:
$arr = array(0,0,1,2,2,5,6,7,7,9,10,10);
假设$n = 2,在每个值的$n 内获取数组中每个值的计数的最有效方法是什么?
例如,6 在$n 中有 3 个其他值:5,7,7。
最终我想要一个相应的数组,其中包含 $n 中的计数,如下所示:
// 0,0,1,2,2,5,6,7,7,9,10,10 // $arr, so you can see it lined up
$count_arr = array(4,4,4,4,4,3,3,4,4,4, 2, 2);
一个简单的foreach循环是要走的路吗? CodePad Link
$arr = array(0,0,1,2,2,5,6,7,7,9,10,10);
$n = 2;
$count_arr = array();
foreach ($arr as $v) {
$range = range(($v-$n),($v+$n)); // simple range between lower and upper bound
$count = count(array_intersect($arr,$range)); // count intersect array
$count_arr[] = $count-1; // subtract 1 so you don't count itself
}
print_r($arr);
print_r($count_arr);
【问题讨论】:
-
看起来数组已经排序了。总是这样吗?
-
不一定。但我总是可以事先排序。
标签: php arrays sorting array-map array-filter