PHP:foreach和数组问题

PHP:foreach和数组问题,php,arrays,foreach,Php,Arrays,Foreach,我有这个: foreach($_POST as $key => $value) { $data[$key] = filter($value); } filter()如果有标记,则删除,并真正转义它们 现在我在POST表单中也有一个数组,因此我在strip\u tags()和mysql\u real\u escape\u string中遇到了错误。我应该如何让$\u POST[“搜索”]不被filter()过滤?您可以使用 并使您的函数filter通过引用将值取为: functio

我有这个:

foreach($_POST as $key => $value) {
    $data[$key] = filter($value);
}
filter()如果有标记,则删除,并真正转义它们

现在我在POST表单中也有一个数组,因此我在
strip\u tags()
mysql\u real\u escape\u string
中遇到了错误。我应该如何让
$\u POST[“搜索”]
不被
filter()过滤

您可以使用

并使您的函数
filter
通过引用将值取为:

function filter(&$value) {
  // apply strip_tags and real escape to $value.
  $value = mysql_real_escape(strip_tags($value));
}
你可以利用

并使您的函数
filter
通过引用将值取为:

function filter(&$value) {
  // apply strip_tags and real escape to $value.
  $value = mysql_real_escape(strip_tags($value));
}
使用:

使用:



首先,您可以使用
array\u map()
来加快速度,您所需要做的就是允许函数识别数组并递归调用自身

function filter( $inVar ){
  if( is_array( $inVar ) )
    return array_map( 'filter' , $inVar );
  return mysql_real_escape( strip_tags( $inVar ) );
}
那么就这样称呼它:

$data = array_map( 'filter' , $_POST );

首先,您可以使用
array\u map()
来加快速度,您所需要做的就是允许函数识别数组并递归调用自身

function filter( $inVar ){
  if( is_array( $inVar ) )
    return array_map( 'filter' , $inVar );
  return mysql_real_escape( strip_tags( $inVar ) );
}
那么就这样称呼它:

$data = array_map( 'filter' , $_POST );

是的,在foreach中,但是将$u POST['search']更改为$value。我已经更改了答案。是的,在foreach中,但是将$u POST['search']更改为$value。我已经改变了答案。这个解决方案是不完整的-如果它击中一个数组,它什么也不做。虽然它可以防止
filter()
在尝试处理数组时抛出错误,但这也意味着数组将丢失数据(因为任何子数组都将被丢弃)。此解决方案不完整-如果命中数组,它将不起任何作用。虽然它可以防止
filter()
在处理数组时抛出错误,但这也意味着数组将丢失数据(因为任何子数组都将被丢弃)。次要语法-不应
array\u walk\u recursive(&$\u POST,filter)
be
array\u walk\u recursive(&$\u POST,'filter')?此外,正如我自己启发的一个问题一样,这个函数是否会尝试在适当的位置修改源数组,而不是像问题中那样将其转录到一个新数组中,如
$data
?我从php.net中看到,这个函数只返回true或false。另外,不推荐使用按引用传递调用时间,并且会发出警告。应该是
array\u walk\u recursive($\u POST,'filter')次要语法-不应
数组\u walk\u递归(&$\u POST,filter)
be
array\u walk\u recursive(&$\u POST,'filter')?此外,正如我自己启发的一个问题一样,这个函数是否会尝试在适当的位置修改源数组,而不是像问题中那样将其转录到一个新数组中,如
$data
?我从php.net中看到,这个函数只返回true或false。另外,不推荐使用按引用传递调用时间,并且会发出警告。应该是
array\u walk\u recursive($\u POST,'filter')