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 に答える