查找给定值所属的数组的两个值

时间:2014-07-28 13:08:58

标签: php arrays

假设我有一个类似于此的数组:

$months = Array('3','6','12','15','18','21','24');

我有$n = 5,找到$n落在数组中的好方法是什么?
也应该在3&之后追加元素在6之前,因为5在3&之间6

e.g.
$n = 5; then array will be
$months = Array('3','5','6','12','15','18','21','24');

$n = 7; then array will be
$months = Array('3','6','7','12','15','18','21','24');

我还需要根据$ n

显示进度
 e.g.
 $n=3 then up to $3 color will get filled

 $n=5 then color will get filled up to middle of 3 & 5 

我已将数组值放在div&我需要相应地显示进度。

进度条示例 http://awesomescreenshot.com/04937zko93

3 个答案:

答案 0 :(得分:0)

假设months数组最初是排序的,我们遍历该数组并找到插入$n的确切位置,将该数组分成两部分并在切片中间插入$n

for($pos = 0; $pos < count($months); $pos++) {
    if($months[$pos] > $n) {
        break;
    }
}
$end_part     = array_slice($months, $pos);
$first_part   = array_slice($months, 0, $pos);
$first_part[] = $n;
$months       = array_merge($first_part, $end_part);

答案 1 :(得分:0)

这是如何将值插入数组中的正确位置:

$months = [3, 6, 12, 15, 18, 21, 24];
$n = 5;

$idx = count(array_filter($months, function($val) use($n) {
    return $val < $n;
}));

array_splice($months, $idx, 0, [$n]);

这是如何计算进度条使用的进度,假设:

  1. 第一个值(本例中为3)为0%
  2. 最后一个值(24)是100%,
  3. 阵列中的每个数字之间存在相同的差异(本例中为3)
  4. -

    $pct = ($n - min($months)) / (max($months) - min($months)) * 100;
    

答案 2 :(得分:0)

$n = 7;
$months = Array('3','6','12','15','18','21','24');

$i = 0;
foreach ($months as $k => $v) {
    if ($n < $v) {
        $months = array_merge(array_slice($months, 0, $i), array("$n"), array_slice($months, $i, count($months)));
        break;
    }
    ++$i;
}
var_dump($months);