$arr = array(25,41,120,...36);
如何将$arr
中的值分组到指定的整数范围$start ~ $end
?
例如,如果级别范围为1~5(1,2,3,4,5)
,如何为$arr
的每个元素指定级别?
唯一的原则是较大的值应映射到较大的水平,并应尽可能覆盖整个水平范围。
更新
我将给出一个可能简化的例子:
如果级别为1~4
,而$arr
为array(25,41,120,36)
,则显然分配级别编号的最佳方式应为:
25 -> 1
41 -> 3
120 -> 4
36 -> 2
答案 0 :(得分:0)
首先,排序:http://php.net/manual/en/function.sort.php(如果你的数组有关联键,请查看asort()
)
然后,我会创建一个可以保存结果的新数组。迭代$arr
,如果检查值是否在你的边界之间。如果是,请将其添加到新阵列。
$NewArray = array();
$arr = sort($arr);
$i = 0;
while ($i < count($arr))
{
if ($arr[$i] <= $HighValue && $arr[$i] >= $LowValue)
{
$NewArray[] = $arr[$i];
}
$i++;
}
答案 1 :(得分:0)
也许你可以试试这个:
$inputarr = array(1,3,5,7,2,4,6,8);
$levelcount = 3; //assume you have 3 levels
$csize = ceil(count($inputarr)/$levelcount);
sort($inputarr);
print_r(array_chunk($inputarr,$csize,true))
输出
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[3] => 4
[4] => 5
[5] => 6
)
[2] => Array
(
[6] => 7
[7] => 8
)
)
答案 2 :(得分:0)
我不太明白你想如何将数字与他们的关联联系起来。据推测,您希望将数字作为键,将级别作为关联数组中的值。至少这就是你的例子。
另外,我不理解$ start和$ end的功能。如果$ start为5且$ end为50,但只有10个数字,会发生什么?如果$ start为2且$ end为7且有10个数字怎么办?我用$ levelOffset替换了机制。我猜你真正想要的是什么。
<?php
$levelOffset = 1;
$arr = array(25,41,120,36);
sort($arr);
$arr = array_flip($arr);
foreach ($arr as &$level) {
$level += $levelOffset;
}
/*
var_dump($arr) gives:
array(4) {
[25]=>
int(1)
[36]=>
int(2)
[41]=>
int(3)
[120]=>
&int(4)
}
*/