Рекурсивный бросок от SimpleXMLObject для Выстраивания

Удалите одиночную кавычку из параметра -f, он будет работать.

Например,

video="youtube-dl -f bestvideo[height<=360]+worstaudio/worst[height<=360]"
22
задан Seb 7 May 2009 в 14:22
поделиться

3 ответа

Не тестировал этот, но, похоже, это сделано:

function convertXmlObjToArr($obj, &$arr) 
{ 
    $children = $obj->children(); 
    foreach ($children as $elementName => $node) 
    { 
        $nextIdx = count($arr); 
        $arr[$nextIdx] = array(); 
        $arr[$nextIdx]['@name'] = strtolower((string)$elementName); 
        $arr[$nextIdx]['@attributes'] = array(); 
        $attributes = $node->attributes(); 
        foreach ($attributes as $attributeName => $attributeValue) 
        { 
            $attribName = strtolower(trim((string)$attributeName)); 
            $attribVal = trim((string)$attributeValue); 
            $arr[$nextIdx]['@attributes'][$attribName] = $attribVal; 
        } 
        $text = (string)$node; 
        $text = trim($text); 
        if (strlen($text) > 0) 
        { 
            $arr[$nextIdx]['@text'] = $text; 
        } 
        $arr[$nextIdx]['@children'] = array(); 
        convertXmlObjToArr($node, $arr[$nextIdx]['@children']); 
    } 
    return; 
} 

Взято из http://www.codingforums.com/showthread.php?t=87283

6
ответ дан 29 November 2019 в 03:36
поделиться

Это возможно. Это рекурсивная функция, которая печатает теги родительских элементов и теги + содержимое элементов, у которых больше нет дочерних элементов. Вы можете изменить его для создания массива:

foreach( $simpleXmlObject as $element )
{
    recurse( $element );
}

function recurse( $parent )
{
    echo '<' . $parent->getName() . '>' . "\n";    

    foreach( $parent->children() as $child )
    {
        if( count( $child->children() ) > 0 )
        {
            recurse( $child );
        }
        else
        {
           echo'<' . $child->getName() . '>';
           echo  iconv( 'UTF-8', 'ISO-8859-1', $child );
           echo '</' . $child->getName() . '>' . "\n";
        }
    }

   echo'</' . $parent->getName() . '>' . "\n";
}
0
ответ дан 29 November 2019 в 03:36
поделиться

Я не вижу в этом смысла, поскольку SimpleXMLObject может быть обработан так же, как и массивы ...

Но если вам это действительно нужно, просто проверьте ответ chassagnette в этой теме или это сообщение на форуме.

0
ответ дан 29 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: