gpt4 book ai didi

php - 从数组中的所有元素中删除不需要的字符

转载 作者:可可西里 更新时间:2023-11-01 00:41:28 25 4
gpt4 key购买 nike

我有这个功能可以去除非法字符,而且效果很好。

这是代码。

<?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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com