如何在PHP中将数组值分组到不同的级别?

时间:2010-06-25 03:47:27

标签: php arrays

$arr = array(25,41,120,...36);

如何将$arr中的值分组到指定的整数范围$start ~ $end

例如,如果级别范围为1~5(1,2,3,4,5),如何为$arr的每个元素指定级别?

唯一的原则是较大的值应映射到较大的水平,并应尽可能覆盖整个水平范围。

更新

我将给出一个可能简化的例子:

如果级别为1~4,而$arrarray(25,41,120,36),则显然分配级别编号的最佳方式应为:

25  -> 1
41  -> 3
120 -> 4
36  -> 2

3 个答案:

答案 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)
}
*/