PHP str_replace并没有取代价值

时间:2016-05-18 01:43:27

标签: php str-replace

我已经把头靠在墙上几天了,因为所有的迹象都表明这应该起作用,所以我显然错过了一些简单的事情。

首先我使用一个函数来获取一组用户提交的注释

SELECT
    o.id,
    a.name,
    (SELECT array_to_string(array_agg(sku), ',') AS Skus
     FROM products p
     INNER JOIN line_items li
        ON li.product_id = p.id
     WHERE li.order_id = o.id
    ) AS Skus
FROM orders o
INNER JOIN addresses a
  ON a.id = o.address_id

然后,在通过id处理每个公园的foreach循环内部,我正在使用数据:

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;        
}

$ cleancom的输出是:

  

数组([0] =>数组([parkid] => 462 [0] => 462 [状态] => KS [1] =>   KS [2] => 462 [评论] =>我注意到其他一些人说不要   浪费你的时间,但我认为没关系。是的,它比大多数都要小,但是   如果你是狂热的骑手,那将会很有趣。 [3] =>我注意到了   这里的其他人说不要浪费你的时间,但我认为没关系。是,   它比大多数都小,但如果你是一个狂热的人,那就很有趣   骑士。 [logname] => John32070 [4] => John32070))

它不会删除'。如果我使用preg_replace,则输出只是空白。我错过了一些简单的东西,但我无法看到它!

2 个答案:

答案 0 :(得分:1)

我测试了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()永远不会应用于多维数组,而在之前的代码中则是如此。如果您在另一个数组中的数组中有类似数组的内容,那么前面的代码将无效,所以如果将来最终出现这种情况,我建议您尝试使用回调函数找到解决方案。

如果这对您有用,请告诉我。

答案 1 :(得分:0)

想要说些别的话,你应该把id放在一个数组中,然后使用MySQL in()函数,它只需要执行一次,而你的方法会多次执行。