PHP str_replace 没有替换值
PHP str_replace is not replacing value
这几天我一直在用头撞墙,因为所有迹象都表明这应该有效,所以我显然遗漏了一些简单的东西。
首先,我使用一个函数来获取一组用户提交的评论
function get_id_comment_info($id) {
global $connection;
$pdo = new PDO('mysql:host='.DB_SERVER.'; dbname='.DB_NAME, DB_USER, DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
$sql = "SELECT parks.parkid, parks.state, pcomment.parkid, pcomment.comment, pcomment.logname
FROM parks
LEFT JOIN pcomment
ON parks.parkid=pcomment.parkid
WHERE parks.id = '$id'";
$result = $pdo->query($sql);
$cominfo = $result->fetchAll();
return $cominfo;
}
然后,在按 ID 处理每个公园的 foreach 循环内,我正在处理数据:
foreach ($display_result as $parkrow) {
$id = $parkrow['parkid'];
$comments = get_id_comment_info($id);
$cleancom = str_replace("'", '', $comments);
print_r($cleancom);
.
.
.
}
$cleancom 的输出是:
Array ( [0] => Array ( [parkid] => 462 [0] => 462 [state] => KS [1] =>
KS [2] => 462 [comment] => I have noticed some others here say don't
waste your time, but I think it's ok. Yes, it's smaller than most, but
there is fun to be had if you are an avid rider. [3] => I have noticed
some others here say don't waste your time, but I think it's ok. Yes,
it's smaller than most, but there is fun to be had if you are an avid
rider. [logname] => John32070 [4] => John32070 ) )
它不会删除 '.如果我使用 preg_replace 那么输出只是空白。我遗漏了一些简单的东西,但我就是看不到它!
我已经测试了 str_replace()
函数并得到以下结果:
$myArray = array("h'i", array("hi'hi", "yo"));
print_r($myArray);
//RESULT: Array ( [0] => h'i [1] => Array ( [0] => hi'hi [1] => yo ) )
应用过滤器后:
$filtered = str_replace( "'", "", $myArray);
print_r($filtered );
//RESULT: Array ( [0] => hi [1] => Array ( [0] => hi'hi [1] => yo ) )
前面的结果表明,顶部数组中的任何字符串值确实被转换(h'i
转换为 hi
),而构成多维数组一部分的任何值(任何数组在数组中)不是 hi'hi
保持不变。这似乎是该函数的创建方式。
一个解决方案是:
$cleancom = [];
foreach ($comments as $key => $value)
{
$cleancom[$key] = str_replace( "'", "", $value );
}
之前的代码之所以有效,是因为 str_replace()
从未应用于多维数组,而在您之前的代码中是。但是,如果您在另一个数组中的数组中有一个数组之类的东西,那么之前的代码将不起作用,因此如果将来出现这种情况,我建议您尝试使用回调函数寻找解决方案。
如果这对你有用,请告诉我。
再说一句,你应该把id放在一个数组里,然后用MySQL in()
函数,只需要执行一次,而你的方法会执行很多次。
这几天我一直在用头撞墙,因为所有迹象都表明这应该有效,所以我显然遗漏了一些简单的东西。
首先,我使用一个函数来获取一组用户提交的评论
function get_id_comment_info($id) {
global $connection;
$pdo = new PDO('mysql:host='.DB_SERVER.'; dbname='.DB_NAME, DB_USER, DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
$sql = "SELECT parks.parkid, parks.state, pcomment.parkid, pcomment.comment, pcomment.logname
FROM parks
LEFT JOIN pcomment
ON parks.parkid=pcomment.parkid
WHERE parks.id = '$id'";
$result = $pdo->query($sql);
$cominfo = $result->fetchAll();
return $cominfo;
}
然后,在按 ID 处理每个公园的 foreach 循环内,我正在处理数据:
foreach ($display_result as $parkrow) {
$id = $parkrow['parkid'];
$comments = get_id_comment_info($id);
$cleancom = str_replace("'", '', $comments);
print_r($cleancom);
.
.
.
}
$cleancom 的输出是:
Array ( [0] => Array ( [parkid] => 462 [0] => 462 [state] => KS [1] => KS [2] => 462 [comment] => I have noticed some others here say don't waste your time, but I think it's ok. Yes, it's smaller than most, but there is fun to be had if you are an avid rider. [3] => I have noticed some others here say don't waste your time, but I think it's ok. Yes, it's smaller than most, but there is fun to be had if you are an avid rider. [logname] => John32070 [4] => John32070 ) )
它不会删除 '.如果我使用 preg_replace 那么输出只是空白。我遗漏了一些简单的东西,但我就是看不到它!
我已经测试了 str_replace()
函数并得到以下结果:
$myArray = array("h'i", array("hi'hi", "yo"));
print_r($myArray);
//RESULT: Array ( [0] => h'i [1] => Array ( [0] => hi'hi [1] => yo ) )
应用过滤器后:
$filtered = str_replace( "'", "", $myArray);
print_r($filtered );
//RESULT: Array ( [0] => hi [1] => Array ( [0] => hi'hi [1] => yo ) )
前面的结果表明,顶部数组中的任何字符串值确实被转换(h'i
转换为 hi
),而构成多维数组一部分的任何值(任何数组在数组中)不是 hi'hi
保持不变。这似乎是该函数的创建方式。
一个解决方案是:
$cleancom = [];
foreach ($comments as $key => $value)
{
$cleancom[$key] = str_replace( "'", "", $value );
}
之前的代码之所以有效,是因为 str_replace()
从未应用于多维数组,而在您之前的代码中是。但是,如果您在另一个数组中的数组中有一个数组之类的东西,那么之前的代码将不起作用,因此如果将来出现这种情况,我建议您尝试使用回调函数寻找解决方案。
如果这对你有用,请告诉我。
再说一句,你应该把id放在一个数组里,然后用MySQL in()
函数,只需要执行一次,而你的方法会执行很多次。