-1

我有这样的事情:

public function options()
      {
         $out = '';
         $docs = $this->getAll();;
         foreach($docs as $key => $doc) {
             $out .= ',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}';
         }
         return $out;
      }

它给了我一个来自数据库的选项列表,但它也在顶部给了我一个空值。

如果我这样写:

public function options()
     {
         //$out = '';
         $docs = $this->getAll();;
         foreach($docs as $key => $doc) {
             $out = '';
             $out .= '{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}';
         }
         return $out;
     }

它没有给我空值,但它只返回一个值。

$out .= ',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 

在这一行中,如果我不添加,它会给我一条错误消息,这是因为我$out = '';在顶部。现在你们能给我一个想法,我怎样才能从数据库中获取所有值而一开始没有空值。

我还有另一个问题,为什么我们;;在这段代码中使用(双分号):

 $docs = $this->getAll();;
4

3 回答 3

1

测试 $out 以查看它是否有任何长度,如果有,请添加逗号和行,否则只需将其设置为行:

$out="";
foreach($docs as $key=>$doc){
    if(strlen($out)){
        $out.=',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}';
    }else{
        $out='{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}';
    }
}

至于你的另一个问题,呃,你写了代码,那你为什么要放双分号?

于 2013-10-14T10:04:54.963 回答
0

这不是构建 JSON 的正确方法。首先创建一个数组,并json_encode()在其上使用。

于 2013-10-14T09:59:53.683 回答
0

我建议使用数组来保存各个值,并使用join将它们连接在一起。

public function options()
{
     $docs = $this->getAll();
     // Create an empty array
     $items = array();
     foreach($docs as $key => $doc) {
         // "Push" an item to the end of the array
         $items[] = '{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}';
     }
     // Join the contents together
     $out = join(",", $items);
     return $out;
}

此外,完全不需要双分号。

于 2013-10-14T10:03:32.850 回答