在PHP中访问多维OBJECT中的值的正确方法是什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中访问多维OBJECT中的值的正确方法是什么相关的知识,希望对你有一定的参考价值。
我有一个像下面的对象
stdClass Object
(
[0] => stdClass Object
(
[className] => stdClass Object
(
[attribute] => stdClass Object
(
[name] => Aabir Hussain
[phone] => 9555555985
[email] => aabir@gmail.com
[create_on] => 12-10-2016 12:12:12
[status] => Active
)
[validationMessage] => stdClass Object
(
[name] => no_error
[phone] => no_error
[email] => Email Already Taken, Please Choose Another One
[create_on] => no_error
[status] => no_error
)
[scenario] => create
)
)
)
我想获得名称的价值而不使用foreach或for循环
我已经尝试了this link,他们已经给出了不同的方法来从像下面的对象获取值。但没有什么对我有用。
print_r($arrayMultiIndex[0]); //not working because it is not an array;
print_r($arrayMultiIndex{0}); //not working
print_r($arrayMultiIndex->0); //not working
我使用的是php 7.0.9
编辑
print_r($arrayMultiIndex->{0}); //also not working or
echo $arrayMultiIndex->{0}->className->attribute->name //not working
编辑Php Fiddle php fiddle link
答案
可能以下链接可以帮助你
How to access object properties with names like integers?
基本上,对象属性访问的Curly-brace语法不适用于全数字键。
或者不是简单地对类型进行类型转换,而是使用我修改的函数arraytoobject版本。这仅适用于您的特定需求。我将密钥转换为字符串,否则将无法访问。
$arrayMultiIndex = [
[
'className' => [
'attribute' => [
'name' => 'Aabir Hussain',
'phone' => 955585,
'email' => 'aabir@gmail.com',
'create_on' => '12-10-2016 12:12:12',
'status' => 'Active'
],
'validationMessage' => [
'name' => 'no_error',
'phone' => 'no_error',
'email' => 'Email Already Taken, Please Choose Another One',
'create_on' => 'no_error',
'status' => 'no_error'
],
'scenario' => 'create',
]
]
];
$arrayMultiIndexObject = arrayToObjectNew($arrayMultiIndex);
function arrayToObject($d) {
if (is_array($d)) {
/*
* Return array converted to object
* Using FUNCTION (Magic constant)
* for recursive call
*/
return (object) array_map(__FUNCTION__, $d);
}
else {
// Return object
return $d;
}
}
function arrayToObjectNew($array) {
if (!is_array($array)) {
return $array;
}
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$object = new stdClass();
if(is_numeric($name))
$name = (string) $name;
$name = strtolower(trim($name));
// if (!empty($name)) {
$object->$name = arrayToObject($value);
// }
}
return $object;
}
else {
return FALSE;
}
}
echo '<pre>'; print_r($arrayMultiIndexObject->{0}); die;
另一答案
如果您不想使用foreach和for循环,那么将此对象转换为数组并过滤掉'name'属性值并以正常方式访问它,如$ arr [0],$ arr [1],...即代码给出下面没有使用foreach和for循环然后获取name属性值..
//Converting object into array
$arrayMultiIndex_arr = json_decode(json_encode($arrayMultiIndex), TRUE);
//Filtering out name property value from array
$name_array = array_column(array_reduce(array_reduce($arrayMultiIndex_arr, 'array_merge', array()), 'array_merge', array()), "name");
print_r($name_array);
另一答案
当我搜索到处时,我找不到任何可行的解决方案,但我可以给你一个建议,将对象转换为数组。
$arrayMultiIndex = (array)$arrayMultiIndex;
echo $arrayMultiIndex[0]['className']['attribute']['name'];
这段代码的Online Example。
请阅读here...的一大堆答案
另一答案
$ name = reset($ arrayMultiIndex) - > className-> attribute-> name;
echo $ name;
以上是关于在PHP中访问多维OBJECT中的值的正确方法是什么的主要内容,如果未能解决你的问题,请参考以下文章