2017-07-14 128 views
2

這是我的目標:如何在php中訪問stdclass對象?

$reportdata = stdClass Object 
(
    [1] => stdClass Object 
     (
      [reportname] => reportname1 
      [reportviews] => 20 
      [reportpath] => reports/reportname1 
      [thumbnailurl] => reports/thumbnailurl/thumbnailurl1.jpg 
      [description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
     ) 

    [2] => stdClass Object 
     (
      [reportname] => reportname2 
      [reportviews] => 20 
      [reportpath] => reports/reportname2 
      [thumbnailurl] => reports/thumbnailurl/thumbnailurl2.jpg 
      [description] => Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
     ) 


) 

我試圖訪問使用$reportdata[1]['reportviews']個人價值,但我得到一個錯誤

「不能使用類型爲stdClass的對象作爲排序」。

如何訪問reportnamereportviews

+0

也許不相關,但是當您嘗試將沒有連續索引的數組轉換爲JSON然後返回時,通常會產生混亂。確保在將數組索引轉換爲JSON之前使用'array_values()'清理數組索引,以確保它將作爲適當的數組而非對象進行反序列化。 – Havenard

+0

您也可以使用'json_decode($ json,true)',因此它將所有內容創建爲關聯數組而不是對象。 – Havenard

+0

@Francis請點擊綠色複選標記以接受以下任何答案。 – MaxZoom

回答

1

嘗試這樣

$reportdata=json_decode(json_encode($reportdata),true); 

然後用這個

$reportdata[1]['reportviews'] 

你不會得到任何錯誤。

+2

'json_decode'需要一個字符串,並且你傳遞一個對象。所以不行。 –

+0

再試一次 –

+0

'mixed json_decode(string $ json [,bool $ assoc = false [,int $ depth = 512 [,int $ options = 0]]])'。將'assoc'設置爲true只會影響返回的結果。總是希望輸入是一個字符串。 – brezanac

8

像這樣: $reportdata->{1}->reportviews

+4

這裏關鍵的一點是''}'可以讓你指定一個表達式作爲一個屬性名稱。 –

0
$reportdata->{'1'}->reportname; 
$reportdata->{'1'}->reportviews; 
0

您可以像其他人提到的那樣訪問對象的屬性,但希望提供其他選項。

get_object_vars - 獲取給定對象

陣列get_object_vars(對象$對象)

http://php.net/manual/en/function.get-object-vars.php

$arrReportData = get_object_vars($reportdata); 
echo $arrReportData[1]->reportviews; 

注意,這是非遞歸的,所以在性能你的情況你會得到一個對象數組。

0

您試圖訪問一個元素的方法:

$reportdata[1]['reportviews'] 

建議的主要對象是關聯數組。

$reportdata = array(
    '1' => array (
    'reportname' => 'reportname1', 
    'reportviews' => '20', 
    'reportpath' => 'reports/reportname1', 
    'thumbnailurl' => 'reports/thumbnailurl/thumbnailurl1.jpg', 
    'description' => 'Lorem ipsum dolor.' 
), 
    : 
); 

但使用stdClass Object時,你可以訪問的變量命名的對象屬性如下:

$atr1 = '1'; $atr2 = 'reportviews'; 
print $reportdata->$atr1->$atr2; 

或使用表達式,如果你的對象是申報像下面這段代碼會工作表示法:

print $reportdata{'1'}{'reportviews'};