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

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

May 07, 2023 pm 06:52 PM

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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 Mar 25, 2025 am 10:37 AM

PHP 8のJITコンピレーションは、頻繁に実行されるコードをマシンコードにコンパイルし、重い計算でアプリケーションに利益をもたらし、実行時間を短縮することにより、パフォーマンスを向上させます。

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

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

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

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

PHP暗号化:対称と非対称暗号化。 PHP暗号化:対称と非対称暗号化。 Mar 25, 2025 pm 03:12 PM

この記事では、PHPの対称的および非対称暗号化について説明し、適合性、パフォーマンス、セキュリティの違いを比較しています。対称暗号化はより速く、バルクデータに適していますが、非対称は安全なキー交換に使用されます。

PHP認証&amp;承認:安全な実装。 PHP認証&amp;承認:安全な実装。 Mar 25, 2025 pm 03:06 PM

この記事では、不正アクセスを防ぎ、ベストプラクティスの詳細、セキュリティ強化ツールの推奨を防ぐために、PHPで堅牢な認証と承認の実装について説明します。

PHPで準備された声明の目的は何ですか? PHPで準備された声明の目的は何ですか? Mar 20, 2025 pm 04:47 PM

PHPの準備されたステートメントは、SQLインジェクションを防止し、コンピレーションと再利用を通じてクエリパフォーマンスを改善することにより、データベースのセキュリティと効率を強化します。

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

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

PHPを使用してデータベースからデータを取得するにはどうすればよいですか? PHPを使用してデータベースからデータを取得するにはどうすればよいですか? Mar 20, 2025 pm 04:57 PM

記事では、PHPを使用してデータベースからデータを取得し、手順、セキュリティ対策、最適化手法、およびソリューションを使用した一般的なエラーをカバーしています。

See all articles