2015-09-23 3 views
3

У меня есть любопытная проблема, и я не могу найти, как ее решить. Я использую интерфейс JsonSerializable в PHP для создания JSON для возврата. В одном объекте, который я использую, у меня есть переменная, представляющая собой массив объектов. Он работает, когда массив содержит только один объект, но когда есть несколько, я получаю пустой массив. Я не понимаю. Вот это код:PHP JsonSerializable вложенный объект

class SessionDate implements JsonSerializable { 

    private $_players; 

    public function getPlayers() { return $this->_players; } 
    public function setPlayers($players) { 
     $this->_players = $players; 
    } 

    public function jsonSerialize(){ 
     return [ 
      'players' => $this->getPlayers() // This is an array of player 
     ]; 
    } 

} 

class Player implements JsonSerializable { 

    private $_id; 
    private $_name; 

    public function getId() { return $this->_id; } 
    public function setId($id) { $this->_id = $id; } 

    public function getName() { return $this->_name; } 
    public function setName($name) { $this->_name = $name; } 

    public function jsonSerialize(){ 
     return [ 
      'id' => $this->getId(), 
      'name' => $this->getName() 
     ]; 
    } 

} 

И это, как я получаю список игроков:

 $q = $this->_db->prepare('the query'); 

     $q->execute(); 
     $players = []; 
     while ($data = $q->fetch()) { 
      $sessionPlayer = constructPlayer($data); 
      $players[] = $sessionPlayer; 
     } 

     return $players; 

Что я делаю неправильно? И почему это работает, когда есть один игрок, а не больше?

Спасибо.

** EDIT **

Я называю действие PHP с $ .ajax и, кажется, что, когда есть больше чем один игрок, ответ $ .ajax проходит через ошибки. Так что, может быть, это потому, что JSON не отформатирован хорошо ...

+0

Что такое 'constructPlayer'? – raina77ow

+0

Это всего лишь набор данных настроек игроку объекта. Это работает, потому что там, где есть только один, я получаю все данные ... – Fred

ответ

0

Pass ваши $ игроков объекта к json_encode с JSON_UNESCAPED_UNICODE

echo json_encode($players, JSON_UNESCAPED_UNICODE); 

JSON_UNESCAPED_UNICODE - Не конвертировать charactors Unicode, чтобы избежать последовательности (\ иххх) Добавлено в PHP 5.4

Смежные вопросы