【问题标题】:PHP - how to cast multidimensional object?PHP - 如何转换多维对象?
【发布时间】:2015-11-13 23:45:39
【问题描述】:

我想知道 PHP 中是否有 内置 方法将多维对象转换 到数组?

问题是当对一个对象应用常规转换时,只有第一个维度会受到影响,所有其他维度都会提醒。

注意:我对仅投射感兴趣!

例子:

$a = new stdClass();
$a->b = 'qwe';
$a->c = new stdClass();
$a->c->d = 'asd';

var_dump((array)$a); // echoes:

array(2) {
  ["b"]=>
  string(3) "qwe"
  ["c"]=>
  object(stdClass)#2 (1) {
    ["d"]=>
    string(3) "asd"
  }
}

如您所见,只有第一个维度受到影响,那么如何投射多维对象?

【问题讨论】:

  • 我不太明白。您的代码和输出似乎正确。您到底期望它做什么?
  • $a->c 仍然是一个对象。我希望它是数组。
  • 我不认为你可以做到这一点,至少在 var_dumpprint_r 下是这样。您可以构建一个 foreach 来呼应您的风格,并在找到作为对象的属性时强制进行数组转换。
  • 各位,请仔细阅读问题。我问是否有内置方式。无需提供递归答案。它不是内置的。

标签: php arrays object multidimensional-array casting


【解决方案1】:

没有将多级对象转换为数组的官方方法,但好消息是有一个 hack。

使用json_encode() 获取对象的JSON 表示,然后将结果传递给json_decode() 并使用TRUE 作为第二个参数来获取数组而不是对象。

$a = new stdClass();
$a->b = 'qwe';
$a->c = new stdClass();
$a->c->d = 'asd';

print_r(json_decode(json_encode($a), TRUE));

输出是:

Array
(
    [b] => qwe
    [c] => Array
        (
            [d] => asd
        )

)

该方法有一些缺点(例如,它无法处理资源),但它们只是小问题。

【讨论】:

  • 哈。折断!删除我几乎相同的答案:)
【解决方案2】:

由于您的问题是是否可以仅使用 单个内置 PHP 函数来递归 cast 对象和子对象作为数组,没有 甚至任何用户自制的回调函数,答案都是,不能那样做。

不过,还有其他方法可以实现。

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多