【问题标题】:Displaying Message based current info from an xml从 xml 显示基于消息的当前信息
【发布时间】:2018-04-17 16:46:16
【问题描述】:

我有以下代码,并希望显示一条消息“上麋鹿河休闲活动 -”,然后根据大坝的当前流出量显示“安全、谨慎或危险”。我以为我有这个工作,但当前流出超过 3000,这应该是危险的,但它仍然显示安全。

$url2 = "http://r7j8v4x4.map2.ssl.hwcdn.net/TFH_R.xml";
$xml2 = simplexml_load_file($url2);
?>
<style>
    .discharge-Safe {
        font-size: 20px;
        background: green;
        color: white;
    }
    .discharge-Caution {
        font-size: 20px;
        background: yellow;
        color: white;
    }
    .discharge-Dangerous {
        font-size: 20px;
        background: red;
        color: white;
    }
</style>

<h4><?php
$discharge = (int) $xml2->RESULTSET[2]->ROW[48]->AVG_HOURLY_DISCHARGE;
$discharge_range = [
    'Safe' => [ 'min_range' => 0, 'max_range' => 500 ], 
    'Caution' => [ 'min_range' => 501, 'max_range' => 799 ], 
    'Dangerous' => [ 'min_range' => 800, 'max_range' => 9000  ]
];

$discharge_class = function ($value) use ($discharge_range) {
    foreach ($discharge_range as $key => $range) {
        if (filter_var($value, FILTER_VALIDATE_INT, ['options' => $range]) !== false) {
            return $key;
        }
    }
};

echo '<span class="discharge-'.$discharge_class($discharge).'">Upper Elk River Recreational Activity - '.$discharge_class($discharge).'</span>';
?></h4>

我做了这个改变:

// last item
$discharge = $xml2->RESULTSET[1]->ROW[count($xml2->RESULTSET[1]->ROW)-1]->AVG_HOURLY_DISCHARGE;

$discharge_range = [
    'safe'      => [ 'min_range' => 0, 'max_range' => 499 ], 
    'caution'   => [ 'min_range' => 500, 'max_range' => 799 ], 
    'dangerous' => [ 'min_range' => 800, 'max_range' => 10000 ]
];

$discharge_class = function ($value) use ($discharge_range) {
    foreach ($discharge_range as $key => $range) {
        if (filter_var($value, FILTER_VALIDATE_INT, ['options' => $range]) !== false) {
            return $key;
        }
    }
};

echo '<span class="discharge-'.$discharge_class($discharge).'">Upper Elk River Recreational Activity-'.$discharge.'</span>';
?></h4

现在我得到了 Upper Elk River Recreational Activity- 3,845,这是正确的流出数字,但没有颜色,根据范围,这应该是红色。

如果我把回显改回原来的代码:

echo '<span class="discharge-'.$discharge_class($discharge).'">Upper Elk River Recreational Activity - '.$discharge_class($discharge).'</span>';
?></h4>

我得到了 Upper Elk River Recreational Activity - ,没有范围名称?

【问题讨论】:

  • 代码对我来说没问题,我猜您的 $discharge 变量不包含您认为的内容。
  • FWIW,我会删除 use ($discharge_range) 并将其声明放在函数中,没有必要用它弄脏你的全局范围。
  • 这是 XML 的链接,[link] r7j8v4x4.map2.ssl.hwcdn.net/TFH_R.xml 我需要第二个结果集,最后一行,所以第 48 行,以及平均每小时排放量,所以 RESULTSET[2]->ROW [48]->AVG_HOURLY_DISCHARGE。我更改了行号,没关系,它总是显示安全。我尝试将名称从安全更改为其他名称,并在浏览器中更改。因此,无论出于何种原因,它都没有读取其他两个范围。

标签: php xml xml-parsing


【解决方案1】:

在 PHP 中使用数组索引时,它们是从 0 开始的,所以如果你想要第二个结果集和第 48 个元素,这应该是...

$discharge = (int) $xml2->RESULTSET[1]->ROW[47]->AVG_HOURLY_DISCHARGE;

问题的第二部分是其中带有逗号的数字。因此,诸如 3,845 之类的数字会导致数字比较出现问题。最简单的方法是删除所有逗号...

$discharge_class = function ($value) use ($discharge_range) {
    $value = str_replace(",", "", $value);   // Remove commas
    foreach ($discharge_range as $key => $range) {
        if (filter_var($value, FILTER_VALIDATE_INT, ['options' => $range]) !== false) {
            return $key;
        }
    }
};

【讨论】:

  • 我会想到同样的事情,由于某种原因,当我只回显流出数字时,它只给我一个输出 3。我对原始帖子进行了编辑,以回显正确的流出编号,但在我想回显时不会给我正确的范围名称。
  • 在答案中添加了一个新部分。
猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多