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()函数,只需要执行一次,而你的方法会执行很多次。