Отображение текущей информации на основе сообщений из xml

У меня есть следующий код, и я хотел бы отобразить сообщение «Рекреационная деятельность в верховьях Элк-Ривер», а затем «Безопасно, осторожно или опасно» в зависимости от текущего оттока воды из плотины. Я думал, что у меня это работает, но текущий отток превышает 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>

Я получаю информацию о рекреационной деятельности в Верхнем Элк-Ривер - нет названия ареала?

У меня код работает нормально, я бы предположил, что ваша переменная $discharge не содержит того, что, по вашему мнению, она делает.

Alex Howansky 17.04.2018 18:49

FWIW, я бы отбросил use ($discharge_range) и поместил его объявление внутри функции, нет необходимости загрязнять им вашу глобальную область видимости.

Alex Howansky 17.04.2018 18:52

Это ссылка на XML, [ссылка] r7j8v4x4.map2.ssl.hwcdn.net/TFH_R.xml, и мне нужен второй набор результатов, последняя строка, то есть строка 48, и средний почасовой разряд, поэтому RESULTSET [2] -> ROW [48] -> AVG_HOURLY_DISCHARGE. Я изменил номера строк, и это не имело значения, всегда отображается Safe. Я попытался изменить имя с безопасного на другое, и оно изменилось в браузере. Так что по какой-то причине он не читает два других диапазона.

Gonzo1982 17.04.2018 19:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании индексов массива в 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, когда я повторял только номер исходящего потока. Я отредактировал свой исходный пост, указав, что у меня есть правильный номер исходящего потока, но я не могу дать мне правильное имя диапазона, когда я захочу повторить это.

Gonzo1982 17.04.2018 21:40

Добавил новую часть к ответу.

Nigel Ren 17.04.2018 21:51

Другие вопросы по теме