Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中通过变量访问对象属性_Php_Object - Fatal编程技术网

在php中通过变量访问对象属性

在php中通过变量访问对象属性,php,object,Php,Object,目标: 我试图通过让用户输入所需的属性来读取任何json文件的某些部分 假设我有一个如下所示的对象: "adverts": [ { "id": "33655628", "companyInfo": { "companyName": "Company A", "homepage": "http://companya.com", "companyText": null }, ... ]

目标: 我试图通过让用户输入所需的属性来读取任何json文件的某些部分

假设我有一个如下所示的对象:

"adverts": [
    {
    "id": "33655628",
    "companyInfo": {
            "companyName": "Company A",
            "homepage": "http://companya.com",
            "companyText": null
    },
    ...
]
我想通过变量指定属性名称或路径来访问属性。 访问第一级$item->$\u id可以正常工作,但是如何通过变量(例如)直接访问嵌套属性companyName

 $_name = "companyInfo->companyName";
例:

编辑: 澄清一下:我希望这对于任何JSON对象都是通用的

初步解决办法: 我按照@Carlos的建议通过循环得到了想要的结果:

$_title_a = explode(".",$_title);
$current = $document;
foreach($_title_a as $a){
    $current = $current->$a;
}
var_dump($current);

如果有人有更好的建议,我会很高兴听到的。谢谢大家

您似乎随身携带json数据。您可以使用以下代码

$obj= json_decode($yourJsonData);
print_r($obj);

foreach ($obj as $key => $value) { 
    $companyinfo = $value['companyInfo']['companyName'];
}

在foreach循环中,您将获得require键和值。这只是一个示例。

为什么您需要这个

你所要做的就是:

$jsonData = json_decode($jsonString, true);

echo $jsonData['adverts'][0]['companyInfo']['companyName'];

//or

foreach($jsonData['adverts'] as $advert){
    echo $advert['companyInfo']['companyName'];
}

我不想打印整个json对象。问题是,我如何通过variable@Holle..updated根据您的要求回答..请查看访问json的嵌套属性,您应该知道深度..因此基于该深度,您可以循环并获取该数据,或者您应该知道该特定属性的索引数据…那么你是说不能分配多深度变量?是的,但属性名和对象深度未知,因此需要变量。@Holle在这里看一下:谢谢@Carlos!我读了这个答案,但我希望有一个更简单的解决方案,它不涉及循环/搜索,因为我只需要以某种方式将:$item->companyInfo->companyName放入这个$item->companyInfo->companyName。它将要求您执行搜索循环,即使您使用对象,因为您的json是以不同的公司结构构建的。如果你不想要它,你必须假设它总是在第一行索引0中查找。例如,我用循环的初级解决方案更新了我的问题。谢谢,您可能需要解析字符串并在组件上循环。或者使用类似eval的东西。。。
$jsonData = json_decode($jsonString, true);

echo $jsonData['adverts'][0]['companyInfo']['companyName'];

//or

foreach($jsonData['adverts'] as $advert){
    echo $advert['companyInfo']['companyName'];
}