首頁 > 後端開發 > 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 函數需要 UTF-8所有字串的編碼。

    以上是如何在 PHP 中存取具有無效或整數名稱的物件屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板