У меня есть следующий код, и я хотел бы отобразить сообщение «Рекреационная деятельность в верховьях Элк-Ривер», а затем «Безопасно, осторожно или опасно» в зависимости от текущего оттока воды из плотины. Я думал, что у меня это работает, но текущий отток превышает 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
И теперь я получаю «Рекреационная активность в Верхнем Элк-Ривер» - 3 845, что является правильным числом оттока, но цвета нет, в зависимости от диапазона он должен быть красным.
Если я верну эхо к исходному коду:
echo '<span class = "discharge-'.$discharge_class($discharge).'">Upper Elk River Recreational Activity - '.$discharge_class($discharge).'</span>';
?></h4>
Я получаю информацию о рекреационной деятельности в Верхнем Элк-Ривер - нет названия ареала?
FWIW, я бы отбросил use ($discharge_range) и поместил его объявление внутри функции, нет необходимости загрязнять им вашу глобальную область видимости.
Это ссылка на XML, [ссылка] r7j8v4x4.map2.ssl.hwcdn.net/TFH_R.xml, и мне нужен второй набор результатов, последняя строка, то есть строка 48, и средний почасовой разряд, поэтому RESULTSET [2] -> ROW [48] -> AVG_HOURLY_DISCHARGE. Я изменил номера строк, и это не имело значения, всегда отображается Safe. Я попытался изменить имя с безопасного на другое, и оно изменилось в браузере. Так что по какой-то причине он не читает два других диапазона.






При использовании индексов массива в PHP они основаны на 0, поэтому, если вам нужен второй набор результатов и 48-й элемент, это должно быть ...
$discharge = (int) $xml2->RESULTSET[1]->ROW[47]->AVG_HOURLY_DISCHARGE;
Вторая часть проблемы в том, что числа с запятыми. Таким образом, такие числа, как 3845, вызывают проблемы с числовым сравнением. Самый простой способ - удалить запятые ...
$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, когда я повторял только номер исходящего потока. Я отредактировал свой исходный пост, указав, что у меня есть правильный номер исходящего потока, но я не могу дать мне правильное имя диапазона, когда я захочу повторить это.
Добавил новую часть к ответу.
У меня код работает нормально, я бы предположил, что ваша переменная
$dischargeне содержит того, что, по вашему мнению, она делает.