将多维对象转换为数组

时间:2016-02-11 08:46:15

标签: php arrays object

我有以下对象:

object(Intro\IntroBundle\Entity\User)#333 (6) {
      ["id":"Intro\IntroBundle\Entity\User":private]=>
      int(3)
      ["username":"Intro\IntroBundle\Entity\User":private]=>
      string(3) "aaa"
      ["email":"Intro\IntroBundle\Entity\User":private]=>
      string(9) "aa@aa.com"
      ["password":"Intro\IntroBundle\Entity\User":private]=>
      string(4) "a1a1"
      ["age":"Intro\IntroBundle\Entity\User":private]=>
      int(10)
      ["dateCreated":"Intro\IntroBundle\Entity\User":private]=>
      object(DateTime)#330 (3) {
        ["date"]=>
        string(26) "2011-01-01 01:01:00.000000"
        ["timezone_type"]=>
        int(3)
        ["timezone"]=>
        string(13) "Europe/Berlin"
      }
    }

我使用了方法:

array($entity);
json_decode(json_encode($entity), true);
get_object_vars ($entity);

并使用个人方法

private function objToArray($obj){
    $arr = array();
    if(!is_object($obj) && !is_array($obj)){
        $arr = $obj;
        die("invalid data");
    }

    foreach ($obj as $key => $value)
    {
        if (!empty($value))
        {
            $arr[$key] = array();
            objToArray($value, $arr[$key]);
        }
        else
        {
            $arr[$key] = $value;
        }
    }
    return $arr;
}

所有这些方法都返回一个空数组。请告诉我为什么?我提到我的对象输入($entity)不是空的 如果你不知道答案,也请不要让我不喜欢。

2 个答案:

答案 0 :(得分:1)

您对象的属性是私有的。如果你var_dump()一个对象,它也打印private属性。

查看这篇文章http://php.net/manual/en/language.oop5.iterations.php。您可以像对象一样迭代对象,但它只迭代公共属性。

答案 1 :(得分:1)

首先,我们无法看到范围。您的所有代码都是私有的(对象属性和方法)。展示范围,我们可以帮助您更好。

问题似乎在这里:

   if (!empty($value))
   {
       $arr[$key] = array();
       objToArray($value, $arr[$key]);
   }

您正在传递未在方法

中定义的第二个参数
 private function objToArray($obj){...}

所以你将一个值传递给objToArray(),我猜这个值是一个字符串,当它到达这一行时:

   $arr = array();

if(!is_object($obj) && !is_array($obj)){
     $arr = $obj;
     die("invalid data");
}

然后它将显示"无效数据",并清空你的数组。

相关问题