【发布时间】:2019-02-23 12:32:50
【问题描述】:
我的目标是从 一维 数组的键中删除一组字符,并从同一数组的值中删除另一组字符。示例:
$arr = [
'a' => 'Letter A!',
'`b`' => 'Letter B w/quotes...',
' c ' => 'Letter C w/spaces?',
' -_-`d`- _ - ' => 'Letter D w/all?!...'
];
$invalid_keys_chars = ['`',' ','_','-'];
$invalid_vals_chars = ['!','?','.'];
// GOAL: looking for something like this function
array_del_invalid($arr, $invalid_keys_chars, $invalid_vals_chars));
var_export($arr);
// ---> output
// array (
// 'a' => 'Letter A',
// 'b' => 'Letter B w/quotes',
// 'c' => 'Letter C w/spaces',
// 'd' => 'Letter D w/all'
// )
我首先研究了常见的 PHP 函数:
-
array_walkexample:允许通过引用替换值,但如果我也在回调参数中通过引用传递键,则不会发生同样的情况; -
array_replace:键也没有修改; -
array_mapexample:构造一个数组的副本,但之前对array_keys($arr)的处理是必要的。
所以我的目标是一次性执行所有替换,避免重复使用循环数次数组的 PHP 函数。
我尝试使用answer on this same thread 放置了一个answer on this same thread,这是有效的,但我无法找到避免unset($arr[$invalid_key]) 的方法(是否有另一种方法可以在不删除它的情况下“更改”密钥本身?)或做如果键和值字符串都需要替换,则只分配一个。
是否已经有一个 PHP 函数可以做到这一点? IE。单循环,很少的条件,最少的替换和整体更高效?如果没有,我该如何改进我的?
【问题讨论】:
标签: php arrays replace str-replace array-key