ホームページ >バックエンド開発 >PHPチュートリアル >PHP で無効な名前または整数名のオブジェクト プロパティにアクセスするにはどうすればよいですか?

PHP で無効な名前または整数名のオブジェクト プロパティにアクセスするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 19:25:21966ブラウズ

How to Access Object Properties with Invalid or Integer Names in PHP?

整数や無効なプロパティ名のような名前を持つオブジェクト プロパティにアクセスするにはどうすればよいですか?

PHP で JSON デコードすると、多くの場合、オブジェクトが生成されます。無効な名前を持つプロパティを含む。この矛盾により、標準のオブジェクト構文を使用してこれらのプロパティにアクセスすることが困難になります。

有効な名前を使用したプロパティへのアクセス

有効な変数名を持つプロパティには、ドットを使用してアクセスできます。表記法:

$data = '{ "name": "John Doe" }';
$obj = json_decode($data);
echo $obj->name; // Output: John Doe

無効な名前を使用したプロパティへのアクセス

整数またはその他の無効な名前を使用してプロパティにアクセスすることは、それほど簡単ではありません。 PHP には、エラーを引き起こす可能性のあるいくつかの癖があります。

  • PHP 7.2 以降では、中括弧構文を使用して数値プロパティにアクセスできます。
$data = '{ "42": "The Answer" }';
$obj = json_decode($data);
echo $obj->{'42'}; // Output: The Answer
  • ただし、すべて数値のプロパティ名でも、この構文はそのままです失敗:
$data = '{ "123": "Three Digits" }';
$obj = json_decode($data);
echo $obj->{'123'}; // Error: syntax error
  • オブジェクトが配列から派生していない場合、上記のルールの例外が発生します:
$obj = new stdClass;
$obj->{'123'} = 'Three Digits';
echo $obj->{'123'}; // Output: Three Digits

実用的解決策

無効な名前のプロパティにアクセスするには、次のことを考慮してください。オプション:

  • 手動で配列にキャスト:
$obj = json_decode($data);
$arr = (array) $obj->highlighting;
$value = $arr['448364']['Data']['0'];
  • 再帰配列キャスト:
function recursive_cast_to_array($obj) {
    $arr = (array) $obj;
    foreach ($arr as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }
    return $arr;
}

$arr = recursive_cast_to_array($obj);
$value = $arr['highlighting']['448364']['Data']['0'];
  • JSON 関数の使用:
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];

JSON 関数には UTF-8 が必要であることに注意してくださいすべての文字列のエンコーディング。

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

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