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

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></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 までご連絡ください。
酸とベースデータベース:違いとそれぞれを使用するタイミング。酸とベースデータベース:違いとそれぞれを使用するタイミング。Mar 26, 2025 pm 04:19 PM

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

PHP入力検証:ベストプラクティス。PHP入力検証:ベストプラクティス。Mar 26, 2025 pm 04:17 PM

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

PHP APIレート制限:実装戦略。PHP APIレート制限:実装戦略。Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

PHPパスワードハッシュ:password_hashおよびpassword_verify。PHPパスワードハッシュ:password_hashおよびpassword_verify。Mar 26, 2025 pm 04:15 PM

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP XSS予防:XSSから保護する方法。PHP XSS予防:XSSから保護する方法。Mar 26, 2025 pm 04:12 PM

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

PHPインターフェイスvs抽象クラス:それぞれを使用する時期。PHPインターフェイスvs抽象クラス:それぞれを使用する時期。Mar 26, 2025 pm 04:11 PM

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター