2015-09-23 39 views
3

我有一个好奇的问题,我找不到如何解决它。 我在PHP中使用JsonSerializable接口来创建一个返回的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; 

我在做什么错?为什么它有一个球员,而不是更多的?

谢谢。

**编辑**

我打电话跟$阿贾克斯PHP的动作,看来,当有一个以上的玩家,在$就响应经历错误。因此,也许这是因为JSON没有格式化以及...

+0

什么是'constructPlayer'? – raina77ow

+0

这只是一系列设置数据给对象播放器。这是工作,因为只有一个我得到所有的数据... – Fred

回答

0

通过你的$球员Object与JSON_UNESCAPED_UNICODE

echo json_encode($players, JSON_UNESCAPED_UNICODE); 

JSON_UNESCAPED_UNICODE到json_encode - 不要Unicode转换charactors为转义序列(\ UXXX)在PHP 5.4中添加