php,array_filter和str_replace作为回调

时间:2017-04-26 00:42:37

标签: php arrays

是否可以使用数组执行类似的操作:

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

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

所以我最终只能使用包含值的数组并删除“event_”前缀

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

3 个答案:

答案 0 :(得分:1)

为什么不直接在原始数组上使用str_replace

这段代码怎么样:

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

答案 1 :(得分:0)

除非您将其展开到foreach循环中,否则不能一气呵成,但您可以map覆盖filter的结果:

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

答案 2 :(得分:0)

试试这个:

$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 )

这对我有用..希望有所帮助:)