Мне нужно, чтобы stripslashes
все элементы массива сразу.
Любая идея, как я могу это сделать?
foreach ($your_array as $key=>$value) { $your_array[$key] = stripslashes($value); }
или для массива многих уровней:
function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")); $array = stripslashes_deep($array); print_r($array);
Для uni-мерных массивов array_map
будет делать:
$a = array_map('stripslashes', $a);
Для многомерных массивов вы можете сделать что-то вроде:
$a = json_decode(stripslashes(json_encode($a)), true);
Этот последний может быть использован для исправления magic_quotes, см. Этот комментарий .
Вы можете использовать array_map
:
$output = array_map('stripslashes', $array);
Я нашел этот класс / функцию
<?php /** * Remove slashes from strings, arrays and objects * * @param mixed input data * @return mixed cleaned input data */ function stripslashesFull($input) { if (is_array($input)) { $input = array_map('stripslashesFull', $input); } elseif (is_object($input)) { $vars = get_object_vars($input); foreach ($vars as $k=>$v) { $input->{$k} = stripslashesFull($v); } } else { $input = stripslashes($input); } return $input; } ?>
в этом блоге, и это действительно помогло мне, и теперь я могу передавать переменные, массивы и объекты через одну и ту же функцию …
Массив массива рекурсивный, с этим решением вам не нужно дублировать ваш массив
function addslashes_extended(&$arr_r){ if(is_array($arr_r)) { foreach ($arr_r as &$val){ is_array($val) ? addslashes_extended($val):$val=addslashes($val); } unset($val); } else $arr_r=addslashes($arr_r); return $arr_r; }
сfunction addslashes_extended(&$arr_r){ if(is_array($arr_r)) { foreach ($arr_r as &$val){ is_array($val) ? addslashes_extended($val):$val=addslashes($val); } unset($val); } else $arr_r=addslashes($arr_r); return $arr_r; }
$result= Recursiver_of_Array($array, 'stripslashes');
код:
function Recursiver_of_Array($array,$function_name=false){ //on first run, we define the desired function name to be executed on values if ($function_name) { $GLOBALS['current_func_name']= $function_name; } else {$function_name=$GLOBALS['current_func_name'];} //now, if it's array, then recurse, otherwise execute function return is_array($array) ? array_map('Recursiver_of_Array', $array) : $function_name($array); }