1

我正在尝试使用 foreach 语句来运行 preg_replaces 使用正则表达式的函数。有人可以帮忙吗,因为我的方法不起作用..

$reg_sent is an array

function reg_sent($i){
  $reg_sent = "/[^A-Za-z0-9.,\n\r ]/";
  return preg_replace($reg_sent, '', $i);
}

foreach($reg_sent as $key=>$value){
  $value = reg_sent($value);
}
4

4 回答 4

0

您没有受到任何影响,因为foreach循环需要通过引用访问元素:

foreach($reg_sent as $key => &$value)
{
    $value = reg_sent($value);
}

请注意,我&之前在循环中添加了$value. 否则,对值的副本foreach进行操作,并且当在循环内对其进行修改时,您将永远不会在循环外看到该值。

于 2012-07-18T16:39:28.457 回答
0

您需要通过引用传递变量:

foreach($reg_sent as $key=>&$value){

否则,您正在对仅在循环中保留其值的本地副本进行操作。

于 2012-07-18T16:39:46.540 回答
0

检查array_map

$reg_sent = array_map("reg_sent", $reg_sent);

这将调用reg_sent数组的每个单元格,并返回一个修改了值的新数组。您可以用foreach上面的内容替换您所说的块。

于 2012-07-18T16:40:41.287 回答
0
function reg_sent($i){ 
    $reg_sent = "/[^A-Za-z0-9.,\n\r ]/"; 
    return preg_replace($reg_sent, '', $i); 
} 

foreach($reg_sent as $key => &$value){ 
    $value = reg_sent($value); 
}
unset($value);

var_dump($reg_sent);
于 2012-07-18T16:41:42.437 回答