2016-02-11 3 views
-1

У меня есть следующий объект:Преобразование многомерного объекта в массив

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) "[email protected]" 
     ["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) не пуст.
А также, пожалуйста, не раздражайте меня, если вы не знаете ответа.

+1

Это потому, что все переменные или члены являются частными в упомянутом объекте –

+0

Я не думаю, что мой объект является приватным, потому что я могу его отобразить. – alexeevyci

ответ

1

Свойства объекта являются закрытыми. Если вы var_dump() объект, как и вы, он также напечатал private.

Посмотрите на эту статью http://php.net/manual/en/language.oop5.iterations.php. Вы можете перебирать объект так же, как и вы, но он выполняет итерацию только публичных свойств.

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"); 
} 

Тогда это будет воспроизведите «неверные данные» и опустошите свой массив.