我有这个trimmer
函数,它以递归方式修剪数组中的所有值(人们毫无理由地放置了大量的空格!):
function trimmer(&$var) {
if (is_array($var)) {
foreach($var as &$v) {
trimmer($v);
}
}
else {
$var = trim($var);
}
}
trimer($_POST);
问题:我想添加新功能:我希望此功能还可以将键中的所有_
(下划线)转换为空格。我知道如何转换键(str_replace('_', ' ', $key)
),但我很难让它以这种递归方式工作......
输入:
$_POST['Neat_key'] = ' dirty value ';
预期结果:
$_POST['Neat key'] = 'dirty value';
答案 0 :(得分:1)
不幸的是,在循环数组时没有办法替换数组的键。这是语言的一部分,唯一的方法是使用临时数组:
$my_array = array(
'test_key_1'=>'test value 1 ',
'test_key_2'=>' omg I love spaces!! ',
'test_key_3'=>array(
'test_subkey_1'=>'SPPPPAAAAACCCEEESSS!!!111 ',
'testsubkey2'=>' The best part about computers is the SPACE BUTTON '
)
);
function trimmer(&$var) {
if (is_array($var)) {
$final = array();
foreach($var as $k=>&$v) {
$k = str_replace('_', ' ', $k);
trimmer($v);
$final[$k] = $v;
}
$var = $final;
} elseif (is_string($var)) {
$var = trim($var);
}
}
/* output
array (
'test key 1'=>'test value 1',
'test key 2'=>'omg I love spaces!!',
'test key 3'=>array (
'test subkey 1'=>'SPPPPAAAAACCCEEESSS!!!111',
'testsubkey2'=>'The best part about computers is the SPACE BUTTON'
)
)
*/
答案 1 :(得分:0)
这是一个老人,但我刚看到相关内容:
function trimmer(&$var) {
if (is_array($var)) {
foreach($var as &$v) {
trimmer($v);
}
// only additional code
$var = array_combine(str_replace('_', ' ', array_keys($var)), $var);
}
else {
$var = trim($var);
}
}
但现在更好的是array_walk_recursive()。