rtrim失败了很长的字符串

时间:2013-07-18 13:51:25

标签: php trim

我正在构建一个非常大的查询字符串,(8000个raws,在一百万年中只使用它一次。)我需要删除最后一个逗号,这是在构建字符串时添加的。

看看我的代码,出于某种原因,好像rtrim()对它没有任何作用;该 传递给rtrim()的字符串完全返回。

(如果你需要query_string值的副本,请告诉我,我也会上传它。)

public function sync_sites_table()
{

    # $query_string = "TRUNCATE TABLE " . self::$table_name;
    # $db->query($query_string);

    $this->build_sites_object();

    $query_string = "INSERT INTO `".self::$table_name . "` (`site_id`, `site_name`) VALUES \n";

    foreach($this->sites_array as $key => $value)
    {
        $query_string .= "('".$key."','".$value."'), \n";
    }

    rtrim($query_string, ",");

    global $db;
    $db->query($query_string);

}

4 个答案:

答案 0 :(得分:0)

您可以使用此功能substr($query_string,0,-1)代替rtrim($query_string, ",");

答案 1 :(得分:0)

foreach($this->sites_array as $key => $value)
{
    $query_string .= "('".$key."','".$value."'), \n";
}

rtrim($query_string, ",");

rtrim的第二个参数是您希望从字符串末尾剥离的字符列表。但是您生成的字符串将始终以, \n结尾 - 没有逗号。你可以尝试:

rtrim($query_string, ", \n");

哪个应该有用;但它可能更优雅:

$params = array();

foreach($this->sites_array as $key => $value)
{
    $params[] = "('".$key."','".$value."')";
}

$query_string .= implode (",", $params);

答案 2 :(得分:0)

rtrim()未通过引用传递;它返回您需要分配给变量的修剪值:

$query_string = rtrim($query_string, ",");

但更清晰的答案可能是:

$first = true;
foreach($this->sites_array as $key => $value)
{
    if (!$first) { $query_string .= ', '; } else { $first = false; }
    $query_string .= "('".$key."','".$value."') \n";
}

所以你不需要修剪任何尾随的,

答案 3 :(得分:0)

尽管3年前已经提出这个问题,但我仍然认为回答可能有用。

最近遇到处理70Mb大小字符串的相同问题,对我来说,它是通过临时增加php的设置memory_limit来解决的。

因此,您可以使用ini_set('memory_limit', '512M')或更改您的php.ini文件以获得更持久的解决方案。

聚苯乙烯。将memory_limit设置为-1不会限制php内存使用量,但请谨慎使用。

more on memory_limit: http://php.net/manual/en/ini.core.php#ini.memory-limit