Функция splicing_json поддерживает дочерние узлы XML, она не очень эффективна и не будет работать, если у вас несколько узлов XML с одинаковым именем, но давайте возьмем этот файл XML в качестве примера:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<simple_text>Hi there!</simple_text>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<phone category="children">
<owners category="children">
<name>Mostafa</name>
<address>Cairo</address>
</owners>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</phone>
<game category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</game>
</bookstore>
Child # 1: simple_text - это первый дочерний узел, который будет обработан функцией, это строковое значение, поэтому (count($child)===0)
будет иметь значение true и будет добавлено в строку json как строковое значение "simple_text":"Hi there!",
.
Дочерний элемент # 2, второй узел, который будет обрабатываться функцией, - это book, это массив, поэтому (count($child)>0)
будет иметь значение true, тогда функция будет обращаться к дочерним узлам узла book, и если любой из ее узлов являетсямассив, он будет работать рекурсивно и обрабатывать его снова if(count($val)>0)
, в противном случае он просто добавит значение дочернего узла так же, как это было с Child # 1, а затем добавит его в переменную str.
Child # 3, этот будет обработан так же, как и дочерний # 2, но у него есть узел с именем владельцев, который содержит массив, if(count($val)>0)
этот оператор вернет true, что означает, что он будет обработан повторно. bу splicing_json и тот же процесс снова будет запущен только на этом узле.затем возвращаемое функцией значение будет добавлено в основную переменную str.
Это простая рекурсивная функция, которая выполняет итерацию до тех пор, пока все узлы не будут обработаны.
, если вы декодируете ее выводдолжен выглядеть примерно так:
Array
(
[simple_text] => Hi there!
[book] => Array
(
[title] => Everyday Italian
[author] => Giada De Laurentiis
[year] => 2005
[price] => 30.00
)
[phone] => Array
(
[owners] => Array
(
[name] => Mostafa
[address] => Cairo
)
[title] => Harry Potter
[author] => J K. Rowling
[year] => 2005
[price] => 29.99
)
[game] => Array
(
[title] => Learning XML
[author] => Erik T. Ray
[year] => 2003
[price] => 39.95
)
)