Web 開発では、一部のデータを XML 形式で送信および保存する必要がよくあります。XML データを配列に変換することは、実際のビジネスでも非常に一般的な要件です。一般的に使用される Web プログラミング言語として、PHP は XML データを処理するための多くのツールや関数も提供します。この記事では、PHP で XML データを配列に変換する方法を説明します。
PHP には、XML データを PHP オブジェクトに変換できる SimpleXML というパーサーが用意されています。 PHP では、オブジェクトを配列にキャストすることで、XML データを配列に変換できます。
$xml = <<
<本>
<name>PHP Programming</name> <author>John Smith</author> <price>15.00</price>
本>
<本>
<name>Web Development</name> <author>Jane Doe</author> <price>20.00</price>
本>
本>
XML;
$data = simplexml_load_string($xml);
$array = json_decode(json_encode($data), TRUE);
print_r($array);
?>
上記のコードは、まず XML ヒアドキュメント (<< XML を解析して配列にするもう 1 つの方法は、PHP の DOM 拡張機能を使用することです。 DOM には、XML ファイルをトラバースするための API がいくつかあります。次のコードを使用します: $xml = << $doc = new DOMDocument(); $books = $ doc->getElementsByTagName("book"); foreach ($books as $book) { array_push($result, $item); ?> <本> 本> $reader = new XMLReader(); if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'book') { } ?> 以上がPHPでXMLを配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
<name>PHP Programming</name>
<author>John Smith</author>
<price>15.00</price>
<name>Web Development</name>
<author>Jane Doe</author>
<price>20.00</price>
XML;
$doc->loadXML($xml);
$result = array();
$item = array( "name" => $book->getElementsByTagName("name")->item(0)->nodeValue,
"author" => $book->getElementsByTagName("author")->item(0)->nodeValue,
"price" => $book->getElementsByTagName("price")->item(0)->nodeValue
}XMLReader の使用
大きな XML ファイルを処理する場合、DOM のメモリ消費量が多すぎる可能性があるため、XMLReader パーサーを採用できます。頻繁に使用する XML ドキュメントをメモリなしで読み取り、PHP 配列に変換します。 $xml = <<
<本> <name>PHP Programming</name>
<author>John Smith</author>
<price>15.00</price>
<name>Web Development</name>
<author>Jane Doe</author>
<price>20.00</price>
XML;
$reader->xml($xml); $book = array();
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$name = $reader->name;
$reader->read();
$book[$name] = $reader->value;
} elseif ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == 'book') {
array_push($data, $book);
break;
}
}