php 对数组应用字符串替换并删除不受影响的元素

u59ebvdq  于 2023-09-29  发布在  PHP
关注(0)|答案(4)|浏览(100)

可以用一个数组来做这样的事情:

Array
(
    [0] => event_foo
    [1] => event_bar
    [2] => 
)

array_filter($array, str_replace("event_", ""));

这样我就可以得到一个数组,它只包含去掉了“event_”前缀的值。
预期结果:

Array
(
    [0] => foo
    [1] => bar
)
kknvjkwl

kknvjkwl1#

为什么不直接在原始数组本身上使用str_replace
下面代码如何:

$arr = ["event_foo","event_bar",""];
print_r(array_filter((str_replace("event_","",$arr))));
qcbq4gxm

qcbq4gxm2#

除非你把它展开成一个foreach循环,否则不能一次完成,但是你可以在filter的结果上执行map

array_map(function ($s) { return str_replace('event_', '', $s); },
          array_filter($array))
mqxuamgl

mqxuamgl3#

PHP有一个简洁的本地函数,非常适合处理替换和过滤任务。
preg_filter()将尝试替换模式中描述的所有字符串和替换字符串,然后它将只返回成功修改的字符串。
模式中的^是一个元字符,表示字符串的开头--这确保了只有在字符串的开头找到event_时,模式才能匹配event_
代码:(Demo

$array = [
    'event_foo',
    'event_bar',
    '',
];

var_export(
    preg_filter('/^event_/', '', $array)
);
exdqitrt

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 )

相关问题