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

标签 php loops replace ordinal

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

这是代码。

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

相关文章:

php - 棘手的查询 : getting Count of one column with 2 conditions for another distinct column

php - 对于非常小的数字,删除数字格式中的 "E"

java - 如何检查 ArrayList 中是否存在索引 + 1 以避免 IndexOutOfBoundsException

python - 异常后如何重试?

Javascript - 替换()方法的反向?

php - MySQLi连接无法建立,MySQL功能正常吗?

php - 以相同的 CodeIgniter 形式上传图像和文本输入

Javascript:将动态生成的值分配给新数组

javascript - 动态替换html标签

java 替换字符串的数组列表