递归遍历php数组并将对象元素转换为存储其类名

时间:2016-07-09 01:19:24

标签: php arrays object recursion

我已经花了好几个小时试图解决这个问题,我知道我错过了一些明显的东西。这就是问题所在:

我有一个数组,它的一些元素是对象,其他是数组,其他是其他类型。我需要的是:

  • 遍历数组并将对象元素转换为数组元素。
  • 通过这些新的数组元素(从对象转换的元素)和已经是数组的元素递归循环(或任何你想要调用的元素)并执行上一个任务(即:将对象元素转换为数组元件)。

以下是问题:每次将对象元素转换为数组时,必须将对象的类名添加为通过转换对象生成的数组的第一个元素。

这是一个简化的例子:

阵列:

Array
(
    [0] => PhpParser\Node\Expr\Assign Object
        (
            [var] => PhpParser\Node\Expr\Variable Object
                (
                    [name] => bar

                )

            [expr] => PhpParser\Node\Scalar\LNumber Object
                (
                    [value] => 22

                )


        )

)

我需要这样的功能:

//$arr is the array previously posted

$arr = cool_object_to_array($arr);

var_dump($arr );

输出

Array
(
    [0] => Array
        (
            [0] => PhpParser\Node\Expr\Assign
            [var] => Array
                (
                    [0] => PhpParser\Node\Expr\Variable 
                    [name] => bar

                )

            [expr] =>Array 
                (
                   [0] => PhpParser\Node\Scalar\LNumber
                   [value] => 22

                )


        )

)

嵌套级别未知。它可以是嵌套在嵌套在其他对象或数组上的对象的许多数组等。这个例子非常简单。我需要一个解决方案来处理这个问题。

提前感谢您的所有答案!

1 个答案:

答案 0 :(得分:0)

这应该这样做:

function cool_object_to_array($array) {
  foreach ($array as $key => &$value) {
    if (is_object($value)) {
      $type = get_class($value);
      $value = (array) $value;
      array_unshift($value, $type);
    }
    if (is_array($value)) {
      $value = cool_object_to_array($value);
    }
  }
  return $array;
}