PHP |使用foreach的键值作为对象的属性值

时间:2017-07-13 12:39:02

标签: php

我想打印一个对象的所有属性。

有没有办法将键值用作对象的属性值?而不是使用get_object_vars

错误

  

未定义的属性:stdClass :: $ key

更新示例

foreach ($arrayOfArrays as $key => $arrayOfValues) {
   foreach($arrayOfValue as $key => $value){
      $object = (object) $value;
      echo $object->$key;
    }
}

$ arrayOfValues

的示例
Array
(
    [key1] => "value1"
    [key2] => "value2"
)

$ value

的示例
stdClass Object
(
    [scalar] => "value1"
)

stdClass Object
(
    [scalar] => "value2"
)

3 个答案:

答案 0 :(得分:3)

我认为在你的情况下这是一个简单的拼写错误:

$arrayOfArrays = [[
    'key1' => 'value 1',
    'key2' => 'value 2',
]];

foreach ($arrayOfArrays as $key => $arrayOfValues) {
    $object = (object) $arrayOfValues;
    echo $object->key1; // you ommited the 1;
}

正如其他提到的,你可以直接使用数组。无需将其转换为对象:

foreach ($arrayOfArrays as $key => $arrayOfValues) {
    echo $arrayOfValues['key1'];
}

如果要显示该阵列的所有键,可以使用以下内容:

foreach ($arrayOfArrays as $key => $arrayOfValues) {
    $object = (object) $arrayOfValues;

    foreach (array_keys($arrayOfValues) as $unkownKey) {
        echo $object->$unkownKey;
    }
}

答案 1 :(得分:1)

您应该使用scalar代替key

<?php

$array = ['hi', 'there'];

foreach ($array as $key => $value) {
    $object = (object) $value;
    // print_r($object);
    echo $object->scalar;
}

工作example here

正如文档所说:

  

对于任何其他值,名为scalar的成员变量将包含该值。

http://php.net/manual/en/language.types.object.php

答案 2 :(得分:0)

目前,我们仍然需要猜测数据结构。以下是我最好的猜测:

$array = array(
    (object) "value1",
    (object) "value2"
);

foreach ($array as $name => $array_value) {
    $object = (object) $array_value;
    foreach ($object as $property => $value) {
        echo $object->$property . "\n";
    }
}

repl.it

处自行尝试