PHP评估数组的内容

时间:2016-09-07 11:13:08

标签: php arrays

我正在尝试评估数组的内容。该阵列包含用户提交的水温。

用户提交2种温度,一种用于热水,另一种用于冷水。

我需要的是评估两个数组项目以确定它们是否在限制范围内,限制为"热水:50到66之间","冷水小于21&#34 ;

如果Hot或Cold失败,则检查标记状态" 1"或者如果它们都通过了检查标志Status" 0"。

以下是我正在使用的代码:

$row_WaterTemp['HotMin'] = "50";
$row_WaterTemp['Hotmax'] = "66";

$SeqWaterArray new(array);

$SeqWaterArray = array("58", "21");


foreach($SeqWaterArray as $key => $val) {
    $fields[] = "$field = '$val'";
    if($key == 0) { 
        if($val < $row_WaterTemp['HotMin'] || $val > $row_WaterTemp['Hotmax']) {
            $Status = 1;
            $WaterHot = $val;
        } else {
            $Status = 0;
            $WaterHot = $val;
        }

    }

    if($key == 1) {
        if($val > $row_WaterTemp['ColdMax']) {
            $Status = 1;
            $WaterCold = $val;
        } else {
            $Status = 0;
            $WaterCold = $val;
        }
    }   

}

我的问题是:

当我运行脚本时,数组键(0)可以工作,但是当计算数组键(1)时,键(1)的状态标志会覆盖key0的状态标志。 如果有人能提供帮助,那就太棒了。 非常感谢你的时间。

4 个答案:

答案 0 :(得分:0)

对我来说似乎没关系,可以限制值,你可以简化

button

如果一个失败,$row_WaterTemp['HotMin'] = "50"; $row_WaterTemp['Hotmax'] = "66"; $SeqWaterArray = array("58", "21"); $Status = array() ; foreach($SeqWaterArray as $key => $val) { if($key == 0) { $Status = ($val >= $row_WaterTemp['HotMin'] && $val <= $row_WaterTemp['Hotmax']) ; $WaterHot = $val; } else if($key == 1) { $Status += ($val >= $row_WaterTemp['ColdMax']) ; $WaterCold = $val; } } ,如果两个测试失败,$Status = 1,如果没有问题,$Status = 2

答案 1 :(得分:0)

<?php

// this function return BOOL (true/false) when the condition is met
function isBetween($val, $min, $max) {
  return ($val >= $min && $val <= $max);
}

$coldMax = 20; $hotMin = 50; $hotMax = 66;

// I decided to simulate a test of more cases:
$SeqWaterArray['john'] = array(58, 30);
$SeqWaterArray['martin'] = array(34, 15);
$SeqWaterArray['barbara'] = array(52, 10);

foreach($SeqWaterArray as $key => $range) {
    $flag = array();
    foreach($range as $type => $temperature) {
        // here we fill number 1 if the temperature is in range 
        if ($type == 0) {
            $flag['hot'] = (isBetween($temperature, $hotMin, $hotMax) ? 0 : 1);     
        } else {
            $flag['cold'] = (isBetween($temperature, 0, $coldMax) ? 0 : 1);     
        }                
    }
    $results[$key]['flag'] = $flag;                
}

var_dump($results);

?>

结果如下:

["john"]=> 
     "flag"=> 
        ["hot"]=> 1
        ["cold"]=> 0 
["martin"]=> 
     "flag" => 
        ["hot"]=> 1 
        ["cold"]=> 0 
["barbara"]=> 
    "flag" => 
        ["hot"]=> 0 
        ["cold"]=> 0 

答案 2 :(得分:0)

当标志设置为1时,您可以在这种情况下使用break语句。根据您的规范,冷水应该小于21,我修改了代码。

<?php

$row_WaterTemp['HotMin'] = "50";
$row_WaterTemp['Hotmax'] = "66";
$row_WaterTemp['ColdMax'] = "21";

$SeqWaterArray = array("58", "21");


foreach($SeqWaterArray as $key => $val) {
    $fields[] = "$key = '$val'";
    if($key == 0) { 
        if($val < $row_WaterTemp['HotMin'] || $val > $row_WaterTemp['Hotmax']) {
            $Status = 1;
            $WaterHot = $val;
            break;
        } else {
            $Status = 0;
            $WaterHot = $val;
        }

    }
if($key == 1) {
    if($val >= $row_WaterTemp['ColdMax']) {
        $Status = 1;
        $WaterCold = $val;
        break;
    } else {
        $Status = 0;
        $WaterCold = $val;
    }
}   

}
echo $Status;

&GT;

这样,如果在任何一种情况下温度都不在这个范围内,就会更容易打破循环。

https://eval.in/636912

答案 3 :(得分:0)

我不认为你需要一个foreach循环,因为你正在使用一个简单的阵列,显然你知道第一个元素是热水温度,第二个元素是冷水温度。我会做这样的事情:

$row_WaterTemp['HotMin'] = 50;
$row_WaterTemp['HotMax'] = 66;
$row_WaterTemp['ColdMax'] = 21;

$SeqWaterArray = array(58, 21);

$waterHot = $SeqWaterArray[0];
$waterCold = $SeqWaterArray[1];

$status = 0;

if ($waterHot < $row_WaterTemp['HotMin'] || $waterHot > $row_WaterTemp['HotMax']) {
    $status = 1;
}
if ($waterCold > $row_WaterTemp['ColdMax']) {
    $status = 1;
}

您当然可以合并if语句。由于可读性,我将它们分开了。

请注意,我从数字中删除了所有引号。引号用于字符串,而不是数字。