假设我有一个类似于此的数组:
$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&我需要相应地显示进度。
答案 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]);
这是如何计算进度条使用的进度,假设:
-
$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);