2017-04-26 79 views
0

是否有可能做這樣的事情有一個數組:PHP,array_filter和str_replace函數回調

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

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

,所以我可以用數組只包含值落得和「event_」前綴去掉

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

回答

0

並非一氣呵成,除非你把它打開成foreach循環,但你可以mapfilter的結果:

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

謝謝,但只是部分有效。空值將被刪除,但前綴'event_'仍然存在。 – Alko

+0

說什麼? https://3v4l.org/IKsoZ – deceze

0

爲什麼不直接在原始陣列上使用str_replace

這個怎麼樣代碼:

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

Dang,我完全忽略了'str_replace'帶數組。你也應該使用'array_filter'來完成這個完整的答案。 – deceze

+0

好吧,我忘記了我也想刪除空值,愚蠢的我:P,所以這裏是更新的答案,希望它被接受 –

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) 

這個工作對我來說..希望它能幫助:)