<?php
$n = array(
'0' => '1.1-4.6',
'1' => '1.2-33.7',
'2' => '1.3',
'3' => '1.4-30',
'4' => '15-44',
'5' => '1.1-4.6',
'6' => '1.2-33.7',
'7' => '1.3',
'8' => '1.4-43.9',
'9' => '9.5-44',
);
$nn = check_zifu($n);
for ($ii=0; $ii < count($nn); $ii++) {
if (count($nn[$ii]) > 1) { //判断是否是范围,若不是,左边界值和右边界值相同
$nnn[$ii]['min'] = ceil($nn[$ii][0]);
$nnn[$ii]['max'] = floor($nn[$ii][1]);
}else{
$nnn[$ii]['min'] = $nn[$ii][0];
$nnn[$ii]['max'] = $nn[$ii][0];
}
}
$nnnn = getNum($nnn);
echo "<pre>";
print_r($nnnn);
function check_zifu($a){
$c = array();
for ($i=0; $i < count($a); $i++) {
$r = strpos($a[$i],'-');
if($r == ''||$r == false||$r == null){
$r = strpos($a[$i],'~');
if($r == ''||$r == false||$r == null){
$c[$i][0] = $a[$i];
}else{
$b = explode('~', $a[$i]);
$c[$i] = $b;
}
}else{
$b = explode('-', $a[$i]);
$c[$i] = $b;
}
}
return $c;
}
function getNum($arr){
for ($i=0; $i < count($arr); $i++) {
$c['min'][$i] = $arr[$i]['min'];
$c['max'][$i] = $arr[$i]['max'];
}
$min_sum = array_sum($c['min']); //计算左边界值之和
$max_sum = array_sum($c['max']); //计算右边界值之和
if($min_sum < 100 && $max_sum > 100){ //若左边界值和大于100或右边界值和小于100,不成立
for ($iii=0; $iii < count($c['min']); $iii++) { //从第一位左边界值开始加一
$max = $c['max'][$iii];
while ($c['min'][$iii]+1 <= $max) { //判断是否超出右边界值
$c['min'][$iii] = $c['min'][$iii]+1;
if (array_sum($c['min']) == 100) {
return $c['min'];
break;
}else if (array_sum($c['min']) > 100) {
$c['min'][$iii] = $c['min'][$iii] - (array_sum($c['min']) - 100);
return $c['min'];
break;
}
}
}
}else if($min_sum == 100){ //若左边界值和为100
for ($ii=0; $ii < count($c['min']); $ii++) {
$n[$ii] = $c['min'][$ii];
}
return $c['min'];
}else if($max_sum == 100){ //若右边界值和为100
for ($iiii=0; $iiii < count($c['max']); $iiii++) {
$n[$iiii] = $c['max'][$iiii];
}
return $c['min'];
}else{
echo 'error';
}
}
?>
php在范围中取值并使和为100
最新推荐文章于 2021-04-01 17:06:52 发布