可以说,我有一个包含1000个值(整数)的数组。我需要从这个数组中得到一个带有f.e的数组。 400个值(数量可以更改,f.e。150等)。
所以我需要返回每个第2.5个数组值,即第1,第3,第6,第8,第11等等。
这有可能吗?
我不需要代码,我只需要一些方法,如何做。
编辑:
我的数组是高程数组(来自另一个带GPS坐标的数组)。我想绘制一个2D模型的高程。可以说,我的地图总是有400px
宽度。 1px
= 1个海拔高度。这就是为什么我需要每个第2.5个高程值......
像这样:
答案 0 :(得分:2)
你不想要第2.5个。你实际上想要将集合划分为五个块,并从每个集合中获得第一个和第三个。
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
您需要第一列和第三列。
这是PHP,所以我们有基于0的数组。
我们可以使用模运算符%
将其分成5个组。然后我们可以看到返回值是0
(即它在第一列中)还是2
(即它在第三列中)。
我将假设您的数组具有从0
开始的数字键。
// PHP 5.6
$filtered = array_filter($array, function($value, $key) {
$mod = $key % 5;
return ($mod === 0) || ($mod === 2);
}, ARRAY_FILTER_USE_BOTH);
// pre-PHP 5.6
$filtered = array();
foreach ($array as $key => $value) {
$mod = $key % 5;
if (($mod === 0) || ($mod === 2)) {
$filtered[$key] = $value;
}
}
var_dump($filtered);
答案 1 :(得分:1)
如何使用modulo %
运算符?
假设您要将1000转换为200个值,循环遍历数组中的所有项并保留计数器,如果计数器%
5 == 0然后将该值放入新数组,或者如果! = 0然后从数组中删除。我们使用模5,因为1000/200 = 5。
答案 2 :(得分:1)
以下是开始的方式。它不能确保输出中包含第一个和最后一个元素,并且可能还有其他一些故障。但是既然你提出了这个想法,那就去吧 - array_reduce
:
$a=[1,2,3,4,5,6,7,8,9,10,11,12]
$step = 2.5;
$i = 0;
$r = array_reduce($a, function($memo, $curr) use(&$i, $step) {
if($i === round($step * count($memo))) {
$memo[] = $curr;
}
$i++;
return $memo;
}, []);
print_r($r);
/*
Array
(
[0] => 1
[1] => 4
[2] => 6
[3] => 9
[4] => 11
)
*/
希望它有所帮助。
答案 3 :(得分:1)
这应该与你似乎正在寻找的东西非常接近。它将收集最接近(向下舍入)到浮点值的值。
$list = range(1,1000);
$targetSize = 300;
$new = array();
$step = count($list) / $targetSize;
$curStep = 0;
for( $i = 0; $i < count($list); $i++ ) {
$curStep++;
if( $curStep > $step ) {
$new[] = $list[ floor($i) ];
$curStep -= $step;
}
}
答案 4 :(得分:1)
所以就是这样:
$arr = range(1, 1387); // f.e.
$cnt = 296; // f.e.
$new = array();
$max = count($arr);
$step = $max / $cnt;
for ($i = 0; $i < $max; $i += $step) {
$new[] = round($arr[(int)$i]);
}