我有这个功能可以去除非法字符,而且效果很好。
这是代码。
<?php
function fix_output($value, $key){
$new_array = array();
$newstr = '';
$good[] = 9; #tab
$good[] = 10; #nl
$good[] = 13; #cr
for($a=32;$a<127;$a++){
$good[] = $a;
}
$len = strlen($value);
for($b=0;$b < $len; $b++){
if(in_array(ord($value[$b]), $good)){
$newstr .= $value[$b];
}//fi
}//rof
$new_array[$key] = $newstr;
return $new_array;
}
$array = array();
$array['references1'] = 'Foo1 ◻◻◻◻◻◻◻◻◻◻◻◻';
$array['references2'] = 'Foo2 ◻◻◻◻◻◻◻◻◻◻◻◻';
array_walk($array,"fix_output");
print_r($array);
我想使用 PHP 函数 array_walk
但是当我使用 print_r($array)
时它没有去除非法字符。
这似乎有什么问题?任何想法都会有所帮助!
不明白的地方请指出!
最佳答案
array_walk
回调不返回任何内容,返回值也不更改值。
如果要更改值,请将参数声明为引用 (&$value
),并在回调结束时重新分配变量。
工作示例:
<?php
function fix_output(&$value, $key){
$newstr = '';
$good[] = 9; #tab
$good[] = 10; #nl
$good[] = 13; #cr
for($a=32;$a<127;$a++){
$good[] = $a;
}
$len = strlen($value);
for($b=0;$b < $len; $b++){
if(in_array(ord($value[$b]), $good)){
$newstr .= $value[$b];
}//fi
}//rof
$value = $newstr;
}
$array = array();
$array['references1'] = 'Foo1 ◻◻◻◻◻◻◻◻◻◻◻◻';
$array['references2'] = 'Foo2 ◻◻◻◻◻◻◻◻◻◻◻◻';
array_walk($array,"fix_output");
print_r($array);
输出:
Array
(
[references1] => Foo1
[references2] => Foo2
)
或者,您可以重构并使用 array_map
,这将创建并返回一个新数组。
<?php
function fix_output($value){
$newstr = '';
$good[] = 9; #tab
$good[] = 10; #nl
$good[] = 13; #cr
for($a=32;$a<127;$a++){
$good[] = $a;
}
$len = strlen($value);
for($b=0;$b < $len; $b++){
if(in_array(ord($value[$b]), $good)){
$newstr .= $value[$b];
}//fi
}//rof
return $newstr;
}
$array = array();
$array['references1'] = 'Foo1 ◻◻◻◻◻◻◻◻◻◻◻◻';
$array['references2'] = 'Foo2 ◻◻◻◻◻◻◻◻◻◻◻◻';
$new_array = array_map("fix_output", $array);
print_r($new_array);
关于php - 从数组中的所有元素中删除不需要的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446847/