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

ale*_*lex 17 php arrays

我知道array_walk()并且array_map().然而,当像这样使用前者(在一个旧项目上)它失败了

array_walk($_POST, 'mysql_real_escape_string');
Run Code Online (Sandbox Code Playgroud)

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

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

foreach($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string($value);
}
Run Code Online (Sandbox Code Playgroud)

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

Gum*_*mbo 31

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

通常,funcname采用两个参数.的阵列参数的值作为所述第一和密钥/第二索引.

但是mysql_real_escape_string期望第二个参数是一个资源.这就是你得到这个错误的原因.

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

array_map('mysql_real_escape_string', $_POST);
Run Code Online (Sandbox Code Playgroud)

第二个参数将被省略,因此使用最后打开的连接.

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

array_map(function($string) use ($link) { return mysql_real_escape_string($string, $link); }, $_POST);
Run Code Online (Sandbox Code Playgroud)

  • `array_map()`也是一个更好的选择,因为它不修改原始数组,它在应用函数后返回一个新数组. (4认同)