Если вы должны использовать регулярное выражение ...
$words = array_map(function($word) {
return preg_replace('/\*\z/', '', $word);
}, $arr);
CodePad .
... но вам, вероятно, лучше не использовать регулярные выражения и использовать что-то вроде ...
$words = array_map(function($word) {
return rtrim($word, '*');
}, $arr);
CodePad .
Если вы хотите вернуть только слова, которые заканчиваются *
, попробуйте что-то вроде этого сначала ...
$words = preg_grep('/\*\z/', $arr);
CodePad .
Единственный недостаток (как упоминалось в комментариях) заключается в том, что PHP будет выполнять итерацию дважды по массиву. Вы можете просто использовать цикл foreach
, чтобы выполнить оба этих действия в одном цикле, если хотите.
Также стоит упомянуть, что анонимные функции - это PHP 5.3. Вы все еще можете большую часть этого кода, просто разделив функции на их собственные именованные функции и передав им ссылку.