【问题标题】:PHP | Use key value of foreach as property value of an objectPHP |使用 foreach 的键值作为对象的属性值
【发布时间】:2017-07-13 12:39:02
【问题描述】:

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

有没有办法将键值用作对象的属性值?而不是使用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"
)

$值示例

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

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

【问题讨论】:

  • $object->$key.
  • @JonStirling 这不行,你会得到以“$”符号为前缀的值。
  • 你试过了吗?
  • $value 的类型是什么?为什么需要将其转换为对象?
  • 那你为什么不写$value[$key]而不是把它转换成一个对象呢?

标签: php


【解决方案1】:

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

$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;
    }
}

【讨论】:

  • 您的第三个解决方案打印出所有值而没有任何错误。谢谢。
【解决方案2】:

您应该使用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

【讨论】:

  • 他的评论说$value是一个数组,所以它不会得到scalar作为属性。
  • 是的,我现在明白了。我已经用数组中的数组测试了一个代码。至少可以说奇怪的 PHP 行为。
  • 我在这个例子中测试过:sandbox.onlinephpfunctions.com/code/…
  • 有什么奇怪的?关联数组转换为具有相同属性的对象。
  • @omerowitz 它工作并打印出所有值。但它仍然会引发错误。未定义的属性:stdClass:$scalar.
【解决方案3】:

这时候,我们还是要对数据结构进行猜测。这是我对一个完整示例的最佳猜测:

$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亲自尝试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2015-05-09
    • 1970-01-01
    • 2018-07-14
    • 2019-09-25
    • 2013-01-14
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多