可以用一个数组来做这样的事情:
Array ( [0] => event_foo [1] => event_bar [2] => ) array_filter($array, str_replace("event_", ""));
这样我就可以得到一个数组,它只包含去掉了“event_”前缀的值。预期结果:
Array ( [0] => foo [1] => bar )
kknvjkwl1#
为什么不直接在原始数组本身上使用str_replace?下面代码如何:
str_replace
$arr = ["event_foo","event_bar",""]; print_r(array_filter((str_replace("event_","",$arr))));
qcbq4gxm2#
除非你把它展开成一个foreach循环,否则不能一次完成,但是你可以在filter的结果上执行map:
foreach
filter
map
array_map(function ($s) { return str_replace('event_', '', $s); }, array_filter($array))
mqxuamgl3#
PHP有一个简洁的本地函数,非常适合处理替换和过滤任务。preg_filter()将尝试替换模式中描述的所有字符串和替换字符串,然后它将只返回成功修改的字符串。模式中的^是一个元字符,表示字符串的开头--这确保了只有在字符串的开头找到event_时,模式才能匹配event_。代码:(Demo)
preg_filter()
^
event_
$array = [ 'event_foo', 'event_bar', '', ]; var_export( preg_filter('/^event_/', '', $array) );
exdqitrt4#
$PREFIX = 'event_'; $array = array('event_foo' => 3, 'event_bar' => 7); $prefixLength = strlen($PREFIX); foreach($array as $key => $value) { if (substr($key, 0, $prefixLength) === $PREFIX) { $newKey = substr($key, $prefixLength); $array[$newKey] = $value; unset($array[$key]); } } print_r($array); // shows: Array ( [foo] => 3 [bar] => 7 )
4条答案
按热度按时间kknvjkwl1#
为什么不直接在原始数组本身上使用
str_replace
?下面代码如何:
qcbq4gxm2#
除非你把它展开成一个
foreach
循环,否则不能一次完成,但是你可以在filter
的结果上执行map
:mqxuamgl3#
PHP有一个简洁的本地函数,非常适合处理替换和过滤任务。
preg_filter()
将尝试替换模式中描述的所有字符串和替换字符串,然后它将只返回成功修改的字符串。模式中的
^
是一个元字符,表示字符串的开头--这确保了只有在字符串的开头找到event_
时,模式才能匹配event_
。代码:(Demo)
exdqitrt4#