Я знаю array_walk() и array_map() .  Однако при использовании прежнего, как это было (по старому проекту), он не прошел 
 array_walk($_POST, 'mysql_real_escape_string'); 
Предупреждение: mysql_real_escape_string () ожидает, что параметр 2 будет ресурсом, указанная строка.
- Известная проблема с PHP-сессией IE 8?
- Как удалить автоматическое форматирование абзаца для страниц ТОЛЬКО, а не сообщений (WordPress)
- Предотвращение входа пользователей из неавторизованной области
- В чем разница между сеансами и файлами cookie в PHP?
- Как передать значение datepicker jquery в форме метода POST?
Поэтому я пошел с этой немного более уродливой версией
 foreach($_POST as $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 
Так почему же не первый способ работы? Каков наилучший способ сопоставления значений массива с функцией?
  Ожидается, что функция обратного вызова, переданная в array_walk , примет два параметра: один для значения и один для ключа: 
Как правило, funcname принимает два параметра. Значение параметра массива является первым, а ключ / индекс вторым.
  Но mysql_real_escape_string ожидает, что вторым параметром будет ресурс.  Вот почему вы получаете эту ошибку. 
  array_map этого используйте array_map , он принимает только значение каждого элемента и передает его данной функции обратного вызова: 
 array_map('mysql_real_escape_string', $_POST); 
Второй параметр будет опущен, поэтому используется последнее открытое соединение.
Если вам нужно передать второй параметр, вам нужно обернуть вызов функции другой функцией, например анонимной функцией :
 array_map(function($string) use ($link) { return mysql_real_escape_string($string, $link); }, $_POST); 
Это потому, что mysql_real_escape_string присваивается два параметра: обе строки.
http://php.net/manual/en/function.mysql-real-escape-string.php
http://www.phpbuilder.com/manual/en/function.array-map.php :
array_map () возвращает массив, содержащий все элементы arr1 после применения функции обратного вызова к каждому из них. Количество параметров, которые принимает функция обратного вызова, должно соответствовать количеству массивов, переданных массиву array_map ()
вы могли бы сделать
 function myescape($val) { return mysql_real_escape_string($val); } 
… тогда
 array_walk($_POST, 'myescape'); 
  mysql_real_escape_string() не будет работать, если вы сначала не подключили mysql.  Причина, по которой это так здорово, заключается в том, что она будет выходить из символов таким образом, чтобы соответствовать типу таблицы.  Второй [необязательный] аргумент является ссылкой на соединение mysql. 
  $_POST всегда настроен как key->value .  Итак, array_walk вызывает mysql_real_escape_string(value, key) .  Обратите внимание, что второй аргумент не является ссылкой. 
Вот почему это не работает. Существует несколько решений, упомянутых выше.
http://php.net/manual/en/function.array-walk.php говорит, что array_walk вызовет функцию с двумя аргументами, значением и ключом. Вы должны написать новую функцию для переноса mysql_real_escape_string. Что-то вроде:
 function wrapper($val, $key){ return mysql_real_escape_string($val); } 
А потом:
 array_walk($_POST, 'wrapper'); 
Извините, если мой PHP неправильный, но я думаю, вы поймете общую идею.
Я знаю, что OP попросил вызвать функцию, однако в тех случаях, когда вам действительно не нужно вызывать функцию, вы можете определить анонимную :
 $ids = [1,2,3]; array_walk($ids,function(&$id){$id += 1000;}); 
У меня возникли проблемы с использованием принятого ответа, поскольку это вызвало у меня ошибки по причинам, которые я не мог решить. Поэтому для тех, у кого возникли проблемы с array_walk или array_map, я нашел, что это работает.
 foreach($_POST as $pk => $pv) $_POST[$pk] = mysql_real_escape_string($pv);