字符串操作,删除一个逗号

时间:2011-06-02 08:42:49

标签: php

更新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\"
              } ],
         } ]
      }
    }";

如何删除最后一个逗号?

6 个答案:

答案 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函数更好地重写整个代码块。