第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用整數(shù)等名稱訪問對象屬性?

如何使用整數(shù)等名稱訪問對象屬性?

PHP
慕虎7371278 2019-06-14 16:33:36
如何使用整數(shù)等名稱訪問對象屬性?如何訪問輸出為:[highlighting] => stdClass Object         (             [448364] => stdClass Object                 (                     [Data] => Array                         (                             [0] => Tax amount liability is .......我想訪問鍵[0]中的字符串值。我想做這樣的事情:print myVar->highlighting->448364->Data->0但這兩個數(shù)字/整數(shù)似乎有問題。編輯:我將在這里介紹一些歷史,我從哪里得到我的瓦爾。我在用json_decode()類似于:$myVar = json_decode(url)
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車

TA貢獻1862條經(jīng)驗 獲得超6個贊

更新PHP 7.2

PHP7.2引入了對在對象和數(shù)組轉(zhuǎn)換中轉(zhuǎn)換數(shù)字鍵,它修復(fù)了這種特殊的不一致性,并使以下所有示例都按照預(yù)期的方式運行。

少了一件讓人困惑的事!


原始答案(適用于7.2.0之前的版本)

PHP有它那部分黑暗的小巷真的不想發(fā)現(xiàn)自己在里面。具有數(shù)字名稱的對象屬性就是其中之一.

他們從沒告訴過你

事實1:您不能很容易地使用非合法變量名稱的名稱訪問屬性。

$a = array('123' => '123', '123foo' => '123foo');$o = (object)$a;echo $o->123foo; // error

事實2:你,你們能,會,可以使用大括號語法訪問此類屬性

$a = array('123' => '123', '123foo' => '123foo');$o = (object)$a;echo $o->{'123foo'}; // OK!

事實3:如果屬性名為所有數(shù)字!

$a = array('123' => '123', '123foo' => '123foo');$o = (object)$a;echo $o->{'123foo'}; // OK!echo $o->{'123'}; // error!

活例.

事實4:嗯,除非對象一開始不是來自數(shù)組。

$a = array('123' => '123');$o1 = (object)$a;$o2 = new stdClass;$o2->{'123'} = '123'; // setting property is OKecho $o1->{'123'}; 
// error!echo $o2->{'123'}; // works... WTF?

活例.

很直觀,你不同意嗎?

你能做什么

選項1:手動執(zhí)行

最實際的方法是將您感興趣的對象轉(zhuǎn)換回數(shù)組中,這將允許您訪問屬性:

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

不幸的是,這不能遞歸地工作。因此,在你的情況下,你需要做如下的事情:

$highlighting = (array)$myVar->highlighting;$data = (array)$highlighting['448364']->Data;$value = $data['0']; // at last!

備選案文2:核選擇

另一種方法是編寫一個函數(shù),遞歸地將對象轉(zhuǎn)換為數(shù)組:

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'];

但是,我并不認為這是一個更好的選擇,因為它將不必要地將數(shù)組轉(zhuǎn)換為您所擁有的所有屬性。對你感興趣的人也一樣。

選項3:聰明地玩它

前面選項的另一種選擇是使用內(nèi)置的JSON函數(shù):

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

JSON函數(shù)有助于執(zhí)行對數(shù)組的遞歸轉(zhuǎn)換,而無需定義任何外部函數(shù)。不管這看起來有多好,它都有選項2的“核子”的缺點。另外缺點是,如果對象中有任何字符串,則這些字符串在UTF-8中編碼(這是json_encode).


查看完整回答
反對 回復(fù) 2019-06-14
?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

只是想補充一下喬恩雄辯的解釋,這是為什么失敗的原因。這都是因為在創(chuàng)建數(shù)組時,php會將鍵轉(zhuǎn)換為整數(shù)(如果可以的話),這會導(dǎo)致對已轉(zhuǎn)換為對象的數(shù)組的查找問題,這僅僅是因為保留了數(shù)字鍵。這是有問題的,因為所有屬性訪問選項都期望或轉(zhuǎn)換為字符串。您可以通過執(zhí)行以下操作來確認這一點:

$arr = array('123' => 'abc');$obj = (object) $arr;$obj->{'123'} = 'abc';print_r( $obj );

它的產(chǎn)出:

stdClass Object ( 
  [123] => 'abc', 
  [123] => 'abc')

因此,對象有兩個屬性鍵,一個數(shù)字(不能訪問)和一個基于字符串的鍵。這就是為什么喬恩#Fact 4工作,因為通過使用大括號設(shè)置屬性,意味著您總是定義一個基于字符串的鍵,而不是數(shù)字。

采用Jon的解決方案,但將其翻轉(zhuǎn),您可以通過執(zhí)行以下操作從數(shù)組中生成一個對象,該對象始終具有基于字符串的鍵:

$obj = json_decode(json_encode($arr));

從現(xiàn)在開始,您可以使用以下任一項,因為Access總是以這種方式將大括號內(nèi)的值轉(zhuǎn)換為字符串:

$obj->{123};$obj->{'123'};

好舊的不合邏輯的PHP.。


查看完整回答
反對 回復(fù) 2019-06-14
?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

我從網(wǎng)上復(fù)制了這個功能。如果它按其規(guī)定工作(“函數(shù)將stdClass對象轉(zhuǎn)換為多維數(shù)組”),請嘗試以下操作:

<?php    function objectToArray($d) {
        if (is_object($d)) {
            // Gets the properties of the given object
            // with get_object_vars function
            $d = get_object_vars($d);
        }

        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return array_map(__FUNCTION__, $d);
        }
        else {
            // Return array
            return $d;
        }
    }?>
  • 首先將數(shù)組傳遞給

    objectToArray

    功能
  • 然后取返回值
  • 回波

    [highlighting][448364][Data][0]

資料來源:PHP stdClass to Array,Array to stdClass


查看完整回答
反對 回復(fù) 2019-06-14
  • 3 回答
  • 0 關(guān)注
  • 483 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號