2017-07-14 101 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'};