Intereting Posts
Переменные, не замененные в шаблоне Twig Prestashop устанавливает множественный выбор из модуля и получает их на вход Доступ к более чем одной модели глубоких связей в литии PHP-скрипт поиска для базы данных mySQL, всего 3 письма Отношения один к одному на двух таблицах, разделяющих первичный ключ strip_tags () … заменять теги пробелом, а не удалять их Как запустить Django и PHP на одном сервере Apache? PHP Печать неопределенного дерева категорий Принудительная косая черта вызывает 404, можно ли исправить использование htaccess? Отсутствует токен CSRF в сеансе Эхо внутри атрибута элемента? Simplexml_load_string ($ string) возвращает пустой объект, но $ string содержит xml? код ниже Портирование PHP5 на устаревший PHP4, DOMDocument quibbles Как я могу отправлять электронные письма из класса обслуживания Symfony2? Как обнаружить внутренние вершины в группах из 2d полигонов? (Например, ZIP-коды для определения территории)

Zend_Config_Xml странное поведение

У меня странная проблема с Zend_Config_Xml.

Вот пример.

С помощью этого xml-файла https://gist.github.com/883465

этот код:

$config = new Zend_Config_Xml('config.xml'); var_dump($config->get('elements')->get('element')->toArray()); 

дает:

 array(2) { [0]=> array(2) { ["a"]=> array(1) { ["attr"]=> string(2) "at" } ["e"]=> array(3) { [0]=> array(1) { ["attr"]=> string(2) "at" } [1]=> array(1) { ["attr"]=> string(2) "at" } [2]=> array(1) { ["attr"]=> string(2) "at" } } } [1]=> array(2) { ["a"]=> array(1) { ["attr"]=> string(2) "at" } ["e"]=> array(3) { [0]=> array(1) { ["attr"]=> string(2) "at" } [1]=> array(1) { ["attr"]=> string(2) "at" } [2]=> array(1) { ["attr"]=> string(2) "at" } } } } 

с этим xml-файлом https://gist.github.com/883469

это дает:

 array(2) { ["a"]=> array(1) { ["attr"]=> string(2) "at" } ["e"]=> array(3) { [0]=> array(1) { ["attr"]=> string(2) "at" } [1]=> array(1) { ["attr"]=> string(2) "at" } [2]=> array(1) { ["attr"]=> string(2) "at" } } } 

и я ожидаю:

 array(1) { [0]=> array(2) { ["a"]=> array(1) { ["attr"]=> string(2) "at" } ["e"]=> array(3) { [0]=> array(1) { ["attr"]=> string(2) "at" } [1]=> array(1) { ["attr"]=> string(2) "at" } [2]=> array(1) { ["attr"]=> string(2) "at" } } } } 

Это сложно, если вы хотите перебирать элементы

 $config = new Zend_Config_Xml('config.xml'); foreach($config->get('elements')->get('element') as $element); 

который является прекрасным, если есть более одного элемента, но если у вас есть только один, вы закончите итерацию над дочерними элементами элемента!

Есть идеи?

РЕДАКТИРОВАТЬ:

Я придумал уродливое обходное решение:

if (0! == $ config-> get ('elements') -> get ('element')) {//}

Это помогает мне определить, существует ли более чем один элемент под тегом элементов.

Очень страшный.

Анитинг умнее?

Кажется, что Zend_Config_Xml явно сбрасывает такие одноэлементные коллекции (в исходном if оператор if ). Возможные обходные пути:

  • Перегрузите Zend_Config_Xml и исправьте код загрузчика, чтобы он не сворачивал 1-элементные коллекции
  • Перегрузите Zend_Config_Xml и перегрузите get() чтобы включить ваше уродливое обходное решение более чистым способом.
  • Используйте SimpleXML вместо Zend_Config_Xml