在PHP中访问多维OBJECT中的值的正确方法是什么

时间:2016-10-04 06:35:45

标签: php oop 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,他们已经提供了不同的方法来从Object获取值,如下所示。但没有什么对我有用。

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

3 个答案:

答案 0 :(得分:1)

以下链接可能会帮助您

How to access object properties with names like integers?

基本上,对象属性访问的Curly-brace语法不适用于全数字键。

或者不是简单地对类型进行类型转换,而是使用我修改的函数arraytoobject版本。这仅适用于您的特定需求。我正在将密钥转换为字符串,否则它将无法访问。

    .filter-me {
  filter: <filter-function> [<filter-function>]* | none
}

答案 1 :(得分:0)

如果您不想使用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);

答案 2 :(得分:0)

当我在任何地方搜索时,我找不到任何可行的解决方案,但我可以给你一个建议,将对象转换为数组。

$arrayMultiIndex = (array)$arrayMultiIndex;
echo $arrayMultiIndex[0]['className']['attribute']['name'];

Online Example此代码。

请阅读整套答案表格here...