ホームページ  >  記事  >  バックエンド開発  >  PHP配列をXMLに変換しても元に戻すことはできません

PHP配列をXMLに変換しても元に戻すことはできません

WBOY
WBOYオリジナル
2023-05-07 18:52:08548ブラウズ

PHP は、Web 開発でデータを取得して処理するために使用される非常に強力なプログラミング言語です。 XML は、Web 上でデータを保存および送信するために使用されるマークアップ言語です。 PHP では、配列をデータ構造として使用してデータを保存し、それを XML 形式に変換できます。ただし、XML を PHP 配列に変換し直すときに問題が発生する場合があります。次に、この問題を調査し、解決策を提供します。

1. 配列から XML
PHP では、配列を XML 形式に変換するのは非常に簡単です。配列をループし、PHP 組み込み関数を使用して XML に変換するだけです。サンプル コードは次のとおりです:

<?php
$data = array(
    'name' => 'John',
    'age' => 30,
    'gender' => 'male'
);
$xml = new SimpleXMLElement('<data/>');
array_walk_recursive($data, array($xml, 'addChild'));
echo $xml->asXML();
?>

出力:

<?xml version="1.0"?>
<data>
  <name>John</name>
  <age>30</age>
  <gender>male</gender>
</data>

SimpleXMLElement クラスを使用して、新しい XML ドキュメントを作成できます。次に、配列データを XML タグに追加します。

2. XML から配列への変換
XML を PHP 配列に変換し直すのは比較的面倒です。 PHP 組み込み関数はこの機能をサポートしていません。ただし、SimpleXML 拡張機能は、XML を解析してオブジェクトに変換する方法を提供します。このオブジェクトでは、プロパティ名を使用してその値を取得できます。たとえば、サンプル XML ドキュメントを次に示します。

<?xml version="1.0"?>
<data>
  <name>John</name>
  <age>30</age>
  <gender>male</gender>
</data>

これを PHP 配列に変換できます。

出力:

array(3) {
  ["name"]=>
  string(4) "John"
  ["age"]=>
  string(2) "30"
  ["gender"]=>
  string(4) "male"
}

simplexml_load_string 関数を使用して、 XML 文字列を SimpleXML オブジェクトに変換し、PHP の組み込み json_encode 関数を使用して JSON 文字列に変換します。最後に、 json_decode 関数を使用して、JSON 文字列を配列に変換します。

3. XML を配列に変換する際の問題
XML を PHP 配列に変換する際に問題が発生する場合は、SimpleXML オブジェクトの属性名に特殊文字が含まれていることが原因である可能性があります。たとえば、次はサンプル XML ドキュメントです:

<?xml version="1.0"?>
<data>
  <company-name>ABC Inc.</company-name>
  <employees>
    <employee id="1">John</employee>
    <employee id="2">Mike</employee>
  </employees>
</data>

次は、この XML を PHP 配列に変換するサンプル コードです:

出力:

array(2) {
  ["company-name"]=>
  string(8) "ABC Inc."
  ["employees"]=>
  array(1) {
    ["employee"]=>
    array(2) {
      [0]=>
      string(4) "John"
      [1]=>
      string(4) "Mike"
    }
  }
}

出力では、「employee」は従業員名と属性を含む連想配列ではなく、配列として返されます。これは、プロパティ名にマイナス記号「-」を使用すると、連想配列のキー名が正しくなくなるためです。たとえば、「company-name」を「company_name」に変更して、同じコードを実行できます。次に例を示します。

<?xml version="1.0"?>
<data>
  <company_name>ABC Inc.</company_name>
  <employees>
    <employee id="1">John</employee>
    <employee id="2">Mike</employee>
  </employees>
</data>

以下は出力です。

array(2) {
  ["company_name"]=>
  string(8) "ABC Inc."
  ["employees"]=>
  array(1) {
    ["employee"]=>
    array(2) {
      [0]=>
      string(4) "John"
      [1]=>
      string(4) "Mike"
    }
  }
}

この出力では、「employee」が連想配列として返され、従業員の名前と属性が含まれます。

この問題の解決策は、キー名としてではなく、SimpleXML オブジェクト内のプロパティ名を使用することです。特殊文字と PHP コードを含むサンプル XML ドキュメントを次に示します。

<?xml version="1.0"?>
<data>
  <company-name>ABC Inc.</company-name>
  <employees>
    <employee id="1">John</employee>
    <employee id="2">Mike</employee>
  </employees>
</data>
 $value) {
    if ($value->count() > 0) {
        foreach ($value as $childKey => $childValue) {
            $data = array();

            foreach ($childValue->attributes() as $attributeName => $attributeValue) {
                $data["@" . $attributeName] = (string) $attributeValue;
            }

            $data["name"] = $childValue->__toString();

            if (!isset($result[$key]) || !is_array($result[$key])) {
                $result[$key] = array();
            }

            array_push($result[$key], $data);
        }
    }
    else {
        $data = (string) $value;

        if (isset($result[$key])) {
            if (!is_array($result[$key])) {
                $result[$key] = array($result[$key]);
            }

            array_push($result[$key], $data);
        }
        else {
            $result[$key] = $data;
        }
    }
}

var_dump($result);
?>

このコードは、SimpleXML オブジェクトのプロパティ名を使用して XML を PHP 配列に変換するメソッドを実装します。この例では、属性を含む XML タグが連想配列に変換されます。たとえば、サンプル XML ドキュメントの出力は次のとおりです。

array(2) {
  ["company-name"]=>
  string(8) "ABC Inc."
  ["employees"]=>
  array(2) {
    [0]=>
    array(2) {
      ["@id"]=>
      string(1) "1"
      ["name"]=>
      string(4) "John"
    }
    [1]=>
    array(2) {
      ["@id"]=>
      string(1) "2"
      ["name"]=>
      string(4) "Mike"
    }
  }
}

出力からわかるように、このメソッドは属性名を正しく解析して連想配列にし、それを他の属性とともに同じ配列に含めます。タグ。

結論:

PHP では、配列を XML に変換し、それを配列に戻すことは比較的簡単です。ただし、特にプロパティ名に特殊文字が含まれている場合、XML を PHP 配列に変換し直すときに問題が発生する可能性があります。 XML は解析時に連想配列に変換されるため、SimpleXML オブジェクトのプロパティ名を使用すると、この問題は解決されます。これらのヒントを理解すれば、PHP で XML 形式と配列形式の間で正常に変換できるようになります。

以上がPHP配列をXMLに変換しても元に戻すことはできませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。