Кодирование
$xchange = new SimpleXMLElement('http://www.bankisrael.gov.il/currency.xml', NULL, TRUE);
$filterCurrencies = array( 'USD', 'GBP' );
$filter = implode( array_map( function($filler) { return 'text()="'.$filler.'"'; }, $filterCurrencies), ' or ' );
$xpathQuery = $xpath = '//CURRENCYCODE[%filter%]/parent::*';
$xpathQuery = str_replace('%filter%', , $xpathQuery);
$currencies = $xchange->xpath($xpathQuery);
/** I do know you already have to code to echo it ... the code is tested, feel free to copy&pase **/
Шаг за шагом
Хорошо, во-первых, вы используете объект SimpleXML для чтенияв данных из банка Израиль.Я предлагаю использовать этот объект для выполнения большей части работы (что намного быстрее по сравнению с фильтрацией с помощью PHP, хотя SimpleXML не самая лучшая вещь для повышения производительности).
Итак, прежде всего, что мы хотим сделатьдостичь?Получение данных основано на содержании его элемента.Для веб-дизайнера это должно звучать как CSS, но не совсем правильно.Для веб-разработчика, имеющего в своем распоряжении XML, который должен звучать как XPath, что является золотым выбором!К счастью, SimpleXML позволяет нам использовать XPath, поэтому мы создадим запрос:
Основы XPath :
//CURRENCYCODE
выберет любой элемент валютного кода
//CURRENCYCODE/parent::*
выберите родительский код валютного кода (<CURRENCY>
), где наши данные
//CURRENCYCODE[text()="JPY"]
выберут только <CURRENCY>
элементов, текст которых в точности равен JPY.
Здесь мы подсчитаем наш список требований:
$filterCurrencies = array( 'USD', 'GBP' ); // we want us dollars and british pounds
$filter = implode( array_map( function($token) { return 'text()="'.$token.'"'; }, $filterCurrencies), ' or ' );
// this will make a string like 'text()="USD" or text()="GBP"' by mapping the filter against the requirements string (currenciecodes get tokens) glueing it with a logical or
Теперь осталось только интегрировать это с нашим шаблоном XPATH
$xpath = '//CURRENCY[%filter%]/parent::*';
$xpath = str_replace('%filter%', $filter, $xpath);
$currencies = $xchange->xpath($xpath);
Счастливого цикла!