ホームページ >バックエンド開発 >PHPチュートリアル >PHP で「json_decode()」を使用して無効なプロパティ名または数値のプロパティ名を持つオブジェクトにアクセスするにはどうすればよいですか?

PHP で「json_decode()」を使用して無効なプロパティ名または数値のプロパティ名を持つオブジェクトにアクセスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 08:16:15772ブラウズ

How Can I Access Objects with Invalid or Numeric Property Names in PHP Using `json_decode()`?

PHP を使用して無効なプロパティ名または数値のプロパティ名を持つオブジェクトにアクセスする

PHP で json_decode() 関数を使用して JSON データを解析しようとする場合、整数の名前を持つプロパティへのアクセスが困難になったり、有効な変数の名前付けが守られなかったりする可能性があります。慣例。この動作は、そのようなプロパティを持つオブジェクトを処理する際の PHP 固有の制限に起因します。

制限事項と特徴

  1. 数値プロパティ名:
    数値名を持つプロパティに (先頭に $ 記号を付けずに) 直接アクセスしようとすると、構文エラー。
  2. 中括弧構文:
    無効な名前を持つプロパティには、中括弧構文を使用してアクセスできます。ただし、名前全体が数字で構成されていない場合に限ります。
  3. オブジェクトの起源:
    から直接作成されたオブジェクト配列は、技術的に無効であっても、中かっこ構文を使用して数値プロパティにアクセスできます。

解決策

解決策 #1: 手動型キャスト

オブジェクトを配列に手動でキャストしてプロパティにアクセスします無効な名前:

$a = array('123' => '123', '123foo' => '123foo');
$o = (object) $a;
$a = (array) $o;
echo $a['123']; // OK!

解決策 2: Nuclear オプション

再帰関数を使用してオブジェクトを配列に変換します:

function recursive_cast_to_array($o) {
    $a = (array) $o;
    foreach ($a as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }

    return $a;
}

$arr = recursive_cast_to_array($myVar);
$value = $arr['highlighting']['448364']['Data']['0'];

解決策 #3: JSON関数

配列への再帰変換には組み込みの JSON 関数を利用します:

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];

要件に最も適したソリューションを選択する前に、各ソリューションの欠点を考慮することが重要です。たとえば、解決策 #2 と #3 では不要な配列変換が実行されますが、解決策 #3 ではさらに文字列プロパティを UTF-8 でエンコードする必要があります。

以上がPHP で「json_decode()」を使用して無効なプロパティ名または数値のプロパティ名を持つオブジェクトにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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