Я пытаюсь найти решение для использования array_map('mysql_real_escape_string', $data);
для многомерных массивов. Если $data является многомерным, php возвращает ошибку. приветствия
Array_map для многомерных массивов
Ответ 1
$array = array( array('A' => "Hello", 'B' => "World"),
array('A' => "Goodnight", 'B' => "Vienna")
);
function myFunc(&$item, $key) {
$item = mysql_real_escape_string($item);
}
array_walk_recursive($array,'myFunc');
var_dump($array);
Ответ 2
function realEscape($data){
global $connection;
$array=[];
do{
if(is_string($data)){
$array= mysqli_real_escape_string($connection,$data);
break;
}
foreach($data as $key =>$value){
$array[$key]=is_array($value)?realEscape($value):mysqli_real_escape_string($connection,$value);
}
}while(0);
return $array;}
Простое решение подходит где угодно. Приветствия!
Ответ 3
Вы также можете использовать minwork/array, чтобы легко отобразить любой многомерный массив.
Самое большое преимущество этого решения по сравнению с нативными функциями заключается в том, что вы также можете отобразить многомерные массивы с различной глубиной вложения, также обращаясь к их ключам, например:
$array = [
1 => [
2 => 'a',
3 => 'b',
4 => [
5 => 'c',
],
],
'test' => 'd',
];
$callback = function ($keys, $value) {
return implode('.', $keys) . " -> {$value}";
}
Arr::map($array, $callback, Arr::MAP_ARRAY_KEYS_ARRAY_VALUE) ->
[
1 => [
2 => '1.2 -> a',
3 => '1.3 -> b',
4 => [
5 => '1.4.5 -> c',
],
],
'test' => 'test -> d',
]
В вашем случае вы можете просто применить функцию mysql_real_escape_string
(без изменения входного массива) к каждому элементу, подобному этому (независимо от того, насколько глубоко каждый элемент вложен)
$escapedData = Arr::map($data, function ($value) {
return mysql_real_escape_string($value);
}, Arr::MAP_ARRAY_VALUE_KEYS_LIST);