2011-09-19 73 views
0

你好我使用一个for循环来准备一个JSON字符串PHP for循环回响着一个JSON阵列,问题最后一个逗号

 
//prepare a JSON Array [ obj1,obj2,obj3.... ] 

echo "["; 

foreach ($usernames as $value){ 
    //prepare a JSON String for $username 
    //e.g. {"username":$value} 

    // insert comma if there is next element in the array 
    echo ","; 
} 

echo "]"; 

我的问题是,有一个尾随逗号是JSON格式不正确。我如何确定for循环已经到达数组的末尾,准备最后一个元素,从而阻止它添加除最后一个逗号之外的所有字符?

三江源

+2

你知道[json_encode()](http://php.net/manual/en/function.json-encode.php)吗? –

+1

构建一个数组并通过'json_encode()'发送它,而不是手动形成json字符串。 – evan

+0

我意识到这一点,但不知何故,我完全忘了它,哦,我的....谢谢你提醒我以更合适的方式实现该功能。 – Gapton

回答

5

有没有使用json_encode这样做的一个原因?您可以使用json_encode通过一个快速调用将正常的php数组转换为JSON。

$arr = ("a"=>"one", "b"=>"two"); 

echo $json_encode($arr); 

http://php.net/manual/en/function.json-encode.php

+0

我正在从数据库中检索数据,所以我陷入了操纵字符串的思维模式。正如我所建议的那样,我已经实现了它,现在它将一个关联数组构建为一个对象,并将此对象存储在一个数组中。然后我调用json_encode来编码该数组。代码干净整洁,谢谢。 – Gapton

+0

当然可以。我以为你可能会为了其他目的而自己创建JSON。 :) – Trevor

1

嗯,你可以全部将其存储在一个变量,它完成,然后之后你可能只是做:

$jsonVar = substr($jsonVar, 0, -1); 

添加完最后之前“]”

+2

我更喜欢trevor的答案。 :) –

+1

如果他有0个用户呢?它会变成'''而不是'[]' – Dani

+0

然后你'echo $ json_encode((object)$ arr);' – awm

3

如果您必须使用for执行此操作,请将逗号的打印更改为开头。只有在不是第一次迭代时才打印它。具体到你的问题

echo "["; 
ob_start(); 
foreach ($usernames as $value){ 
    //prepare a JSON String for $username 
    //e.g. {"username":$value} 

    // insert comma if there is next element in the array 
    echo ","; 
} 
$data = ob_get_contents(); 
ob_end_clean() ; 
echo rtrim($data,','); 
echo "]" 

但正确/标准/更简单的方法

0

解决办法是简单地做json_encode($用户名);