我知道 array_walk()
和 array_map()
。但是,当像这样使用前者时(在旧项目上)它失败了
array_walk($_POST, 'mysql_real_escape_string');
Warning: mysql_real_escape_string() expects parameter 2 to be resource, string given.
所以我选择了这个稍微难看的版本
foreach($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
那么为什么第一种方法不起作用呢?将数组值映射到函数的最佳方法是什么?
最佳答案
传递给array_walk
的回调函数预计接受两个参数,一个用于值,一个用于键:
Typically, funcname takes on two parameters. The array parameter's value being the first, and the key/index second.
但是mysql_real_escape_string
期望第二个参数是资源。这就是您收到该错误的原因。
使用array_map
相反,它只获取每个项目的值并将其传递给给定的回调函数:
array_map('mysql_real_escape_string', $_POST);
第二个参数将被省略,因此使用最后打开的连接。
如果需要传递第二个参数,则需要将函数调用包装在另一个函数中,例如一个anonymous function :
array_map(function($string) use ($link) { return mysql_real_escape_string($string, $link); }, $_POST);
关于php - 将函数应用于数组的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43744909/