更新1:
这就是我尝试构建字符串的方式:
header('Content-type:application/json');
function getdata($the_query)
{
$connection = mysql_connect('server', 'user', 'pass') or die (mysql_error());
$db = mysql_select_db('db_name', $connection) or die (mysql_error());
$results = mysql_query($the_query) or die(mysql_error());
$the_data = "{
\"rss\": {
\"channels\" : [
{
\"title\" : \"".$title."\",
\"link\": \"http://www.mycompany.com/external.php\",
\"description\": \"company description goes here\",";
while($row = mysql_fetch_array($results))
{
extract($row);
$the_data .= "\"items\" : [
{
\"title\": \"".$title."\",
\"link\": \"".$link."\",
\"guid\": \"".$link."\",
\"pubDate\": \"".$date."\",
\"description\": \"".$description."\"
} ],";
}
$the_data .= "} ]
}
}";
mysql_close($connection);
return $the_data;
}
原始问题:
我有一个类似于此的字符串:
$mystring = "{
\"rss\": {
\"channels\" : [
{
\"title" : \"title goes here\",
\"link": \"link goes here\",
\"description": \"description goes here\",
\"items\" : [
{
\"title\": \"title goes here\",
\"link\": \"url goes here\",
\"guid\": \"id goes here\",
\"pubDate\": \"data goes her\",
\"description\": \"description goes here\"
} ],
\"items\" : [
{
\"title\": \"title goes here\",
\"link\": \"url goes here\",
\"guid\": \"id goes here\",
\"pubDate\": \"data goes her\",
\"description\": \"description goes here\"
} ],
\"items\" : [
{
\"title\": \"title goes here\",
\"link\": \"url goes here\",
\"guid\": \"id goes here\",
\"pubDate\": \"data goes her\",
\"description\": \"description goes here\"
} ],
} ]
}
}";
如何删除最后一个逗号?
答案 0 :(得分:3)
首先获得字符串反向的位置
stripos(',',strrev($ myString))
然后你可以随心所欲,替换它,删除它,直到你。
答案 1 :(得分:1)
正如评论中所提到的,你可能会以错误的方式接近它。
但是如果你真的想这样做,以下将删除最后一个逗号:
$mystring = preg_replace("/,(?![^,]*,)/",'',$mystring);
答案 2 :(得分:1)
不应修复错误,而应修复原因,不要在最初插入最后一个逗号。
最好的方法是使用PHP的本机数据类型构建数据结构,然后使用json_encode
将其转换为JSON数据字符串:
function getdata($the_query)
{
$connection = mysql_connect('server', 'user', 'pass') or die (mysql_error());
$db = mysql_select_db('db_name', $connection) or die (mysql_error());
$results = mysql_query($the_query) or die(mysql_error());
$channel = array(
'title' => $title,
'link' => 'http://www.example.com/external.php',
'description' => 'company description goes here',
'items' => array()
);
while ($row = mysql_fetch_array($results)) {
$channel['items'][] = array(
'title' => $row['title'],
'link' => $row['link'],
'guid' => $row['link'],
'pubDate' => $row['date'],
'description' => $row['description']
);
}
mysql_close($connection);
$data = array('rss' => array('channels' => array($channel)));
return json_encode($data);
}
答案 3 :(得分:0)
我会尝试在生成它时使其正确。
我这是我知道的唯一方法,即使用。=添加到字符串然后循环数据库以获取循环的位
从这个评论中看起来你只是自己构建字符串。
在你的循环中,检查你所在的数组中的哪个元素并且不添加逗号(原谅伪代码性质的例子)
$string .= item[i];
if($iterator < ($numberofitems-1){$string .=",";}
显然在上面的示例中,您需要获取返回的行数,并检查每个循环是否还有更多行。
这样说,我倾向于使用http://www.php.net/manual/en/function.json-encode.php
构建json答案 4 :(得分:0)
你可以这样做:
$pos= strripos($mystring, ",");
$mystring[$pos]=" ";
答案 5 :(得分:0)
尽可能少地进行修改(懒惰和错误的方式),你可以改变$ the_data字符串的创建方式:
$pieces = array();
while($row = mysql_fetch_array($results))
{
extract($row);
$pieces[] = "\"items\" : [
{
\"title\": \"".$title."\",
\"link\": \"".$link."\",
\"guid\": \"".$link."\",
\"pubDate\": \"".$date."\",
\"description\": \"".$description."\"
} ]";
}
$the_data .= implode(',', $pieces);
但总的来说,根据上面的答案,使用json_encode函数更好地重写整个代码块。