2017-07-13 95 views
1

我想打印一个对象的所有属性。PHP |使用foreach的键值作为对象的属性值

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

错误

未定义的属性:stdClass的:: $关键

更新

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

的$例arrayOfValues

Array 
(
    [key1] => "value1" 
    [key2] => "value2" 
) 
$价值

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

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

'$对象 - > $ key'。 –

+0

@JonStirling这不起作用,你会得到以'$'为前缀的值。 – melkawakibi

+0

你试过了吗? – bansi

回答

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

您的第三个解决方案打印出所有的值,没有任何错误。谢谢。 – melkawakibi

1

您应该使用scalar而不是key

<?php 

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

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

工作example here


作为文档上说:

对于任何其他值,一个名为标量成员变量将包含值。

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

+1

他的评论说'$ value'是一个数组,所以它不会得到'标量'作为属性。 – Barmar

+0

是的,我现在明白了。我已经在数组中测试了一个包含数组的代码。很奇怪的PHP行为至少可以说。 – omerowitz

+0

正如我在这个例子中测试的那样:http://sandbox.onlinephpfunctions.com/code/ebf5f29ca0595532cf1704c9a26aab4b1cd9e9f2 – omerowitz

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