У меня странная проблема с 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 ).  Возможные обходные пути: 
get() чтобы включить ваше уродливое обходное решение более чистым способом.