将函数应用于数组的简单方法

2022-08-30 18:19:15

我知道和.但是,当像这样使用前者(在旧项目上)时,它失败了array_walk()array_map()

array_walk($_POST, 'mysql_real_escape_string');

警告:mysql_real_escape_string() 期望参数 2 是资源,给定字符串。

所以我选择了这个稍微丑陋的版本。

foreach($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string($value);
}

那么,为什么第一种方式不起作用呢?将数组的值映射到函数的最佳方法是什么?


答案 1

传递给array_walk的回调函数应接受两个参数,一个用于值,一个用于键:

通常,funcname 采用两个参数。数组参数的值是第一个,键/索引是第二个。

mysql_real_escape_string期望第二个参数是资源。这就是您收到该错误的原因。

使用array_map,它只获取每个项的值并将其传递给给定的回调函数:

array_map('mysql_real_escape_string', $_POST);

第二个参数将被省略,因此将使用上次打开的连接。

如果需要传递第二个参数,则需要将函数调用包装在另一个函数中,例如匿名函数

array_map(function($string) use ($link) { return mysql_real_escape_string($string, $link); }, $_POST);

答案 2

我知道OP要求调用函数,但是如果您实际上不需要调用函数,则可以定义一个匿名函数

$ids = [1,2,3];
array_walk($ids,function(&$id){$id += 1000;});