我从来没有在这里发帖,因为我总是在其他帖子中找到答案......但这次没有任何作用,我不知道我做错了什么。
我需要将var_dump变量转换为字符串。我在php手册中找到了ob_start()
和ob_get_clean()
来实现这一目标。
对于text-logfile / debugging需求,我希望清除所有\ n,\ r,多个空格等。
我对SO的搜索为我带来了像
这样的解决方案$r = preg_replace( '/\s+/', ' ', trim($r));
//or
$r = trim(preg_replace( '/\s+/', ' ', $r));
//I even tried this:
$r = trim(preg_replace( '/\s+/', ' ', trim($r)));
但是我可以摆脱最后一个没有这些解决方案的换行符。
这里是函数的代码:
function var_dump_to_string ($v,$style='normal') {
ob_start();//use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(preg_replace( '/\s+/', ' ', trim($r)));
return $r;
}
我的课本中还有一个不受欢迎的换行符。我试着var_dump这个函数的结果,确实有一个新行... 我错过了什么?
编辑:(工作)功能现在看起来像这样,感谢@vks和@anubhava答案:
function var_dump_to_string ($v,$style='normal') {
$r = var_export($v, true);
if($style=='flat') $r = preg_replace('/\s+|\s$/', ' ', $r);
return $r;
}
答案 0 :(得分:1)
\s$
试试这个。empty string
。
\s+|\s$
答案 1 :(得分:1)
使用var_export函数来获取字符串中变量定义的返回值:
$ret = var_export($v, true);
// code to replace newline etc:
$ret = preg_replace('/\s+$/', '', $ret);
答案 2 :(得分:1)
试试这个
$r = trim(preg_replace( '/(\r)?\n(\s*)?(\r)?\n/', ' ', trim($r)));
答案 3 :(得分:0)
解决方案1: preg_replace("/\r\n|\r|\n/", ' ', $r)
代码:
function var_dump_to_string($v, $style='normal'){
ob_start(); //use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(preg_replace("/\r\n|\r|\n/", ' ', $r));
return $r;
}
解决方案2: str_replace(PHP_EOL, '', $r)
代码:
function var_dump_to_string($v, $style='normal'){
ob_start(); //use buffering to catch direct output from var_dump()
var_dump($v);
$r=ob_get_clean();
if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
$r = trim(str_replace(PHP_EOL, ' ', $r));
return $r;
}
“PHP_EOL”包括所有“行尾”字符。此解决方案是替换“行尾”字符的最佳方法。