Ответы пользователя по тегу PHP
  • Хочу разобраться в коде данного скрипта. Как выдернуть элемент из массива в данном примере?

    $file в вашем случае не массив, а объект SimpleXMLElement, он наполнен данными из xml файла, сам класс SimpleXMLElement имплементирует интерфейс Traversable, что позволяет ему использоваться в цикле foreach, $el - также объект типа SimpleXMLElement, доступ к его полям можно получить напрямую, как тут $el->CharCode, это работает через магический метод __get(). __toString() - метод, который приводит объект SimpleXMLElement к строке.
    Чтобы подробнее понять, как он работает и что есть внутри, загляните в класс SimpleXMLElement и посмотрите, что там есть, тогда станет понятнее.

    Что касается кода, то можно записать как-то так:

    $file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=" . date("d/m/Y"));
    
            $values = [];
    
            foreach ($file as $el) {
                if ($el->CharCode == 'USD' || $el->CharCode == 'EUR') {
                    $values[$el->CharCode->__toString()] = $el->Value->__toString();
                }
            }
            print_r($values);
    Ответ написан
    Комментировать
  • В чем правильно сохранить состояние выполнения?

    Для таких целей очень удобно использовать memcache, сетите значение по уникальному ключу, например MY_KEY_ . id_user с TTL на 5 минут, перед выполнением проверяете, нет ли такого значения в кеше. По истечении ttl кеш сам убьет это значение. Базу данных для таких вещей дергать очень нецелесообразно и ресурсозатратно, особенно, если проект под нагрузкой.
    Ответ написан