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

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

Patricia Arquette
リリース: 2024-12-21 19:25:21
オリジナル
1003 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート