Php rtrim在字符串很长时失败

Php rtrim在字符串很长时失败,php,trim,Php,Trim,我正在构建一个非常大的查询字符串(8000个raw,百万年才使用一次)。我需要去掉最后一个逗号,它是在构建字符串时添加的 看看我的代码,出于某种原因,它似乎对它没有任何影响;这个 传递到rtrim()中的字符串返回完全完整 (如果您需要查询字符串值的副本,请告诉我,我也会上传。) 您可以使用此函数substr($query\u string,0,-1)代替rtrim($query\u string,,”) rtrim的第二个参数是要从字符串末尾剥离的字符列表。但是您正在生成的字符串将始终以,\n

我正在构建一个非常大的查询字符串(8000个raw,百万年才使用一次)。我需要去掉最后一个逗号,它是在构建字符串时添加的

看看我的代码,出于某种原因,它似乎对它没有任何影响;这个 传递到
rtrim()
中的字符串返回完全完整

(如果您需要查询字符串值的副本,请告诉我,我也会上传。)


您可以使用此函数
substr($query\u string,0,-1)
代替
rtrim($query\u string,,”)

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

rtrim($query_string, ", \n");
哪些应该有效;但这样做可能更优雅:

$params = array();

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

$query_string .= implode (",", $params);
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年前提出的问题,但我仍然认为回答这个问题可能有用

最近在处理70Mb大小的字符串时遇到了同样的问题,对我来说,通过临时增加php的ini设置
内存限制
解决了这个问题

因此,您可以使用
ini\u集('memory\u limit','512M')
或更改php.ini文件以获得更持久的解决方案

另外,将
memory\u limit
设置为-1不会限制php内存使用,但请谨慎使用

有关内存限制的更多信息:

字符串以
,\n
结尾,而您只是告诉rtrim删除尾随的
,这是一个问题吗?因为末尾不会有逗号。发布查询字符串可能会有所帮助,是的。如果它太长,你可以把它发布在pastebin网站上。@andrewsi我也这么认为,但删除它没有帮助。@elad.chen-删除没有帮助的内容?另外,看看我的答案,看看这两个建议是否有帮助。rtrim()不是通过引用传递的;它返回需要分配给变量的修剪值:
$query\u string=rtrim($query\u string,,”)我知道这个解决方案,但我正在试图找出rtrim失败的原因。。。。。尽管如此,我仍然认为使用内爆更简洁:从性能角度来看,内爆解决方案会比rtrim更快吗?我怀疑它的效率会稍低一点-您正在构建一个数组,而不是填充一个字符串,然后在最后将其连接在一起;因此,您将使用更多内存,并且可能需要更长的时间。但除非你谈论的是巨大的数据集,否则我认为性能差异不会很明显。这就是我所想的:)我不确定我是否遵循了更干净的方式。第一个值在何处/何时更改?在第一次迭代中,$first设置为true;因此,代码将$first设置为false,并将键/值附加到查询字符串中;在随后的迭代中,$first始终为false,因此代码在将键/值附加到查询字符串之前添加逗号。这意味着您永远不会有需要删除的尾随逗号。非常感谢。
$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";
}