2015-03-18 2 views
1

У меня есть значение как admin,bliucfirst после запятой значения, разделенные

Я использовал этот код, чтобы сделать первую букву капитала

<?php ucfirst('admin,bli'); ?> 

И мой результат Admin,bli

Мой ожидается выход

Admin,Bli

Как я могу достичь этого без использования функции разрыва и цикла for?

+0

Использование регулярных выражений, который ищет буквы после запятой, с обратным вызовом –

+0

, как я могу это сделать? и его динамическое значение тоже –

+0

ucfirst только принять один параметр, я не думаю, что его можно без взрывов и взорвать. –

ответ

2
<?php 
    echo join(',', array_map('ucfirst', explode(',', 'bill,jim'))); 
?> 

Explode запятой, карта ucfirst каждый элемент с помощью array_map и взрывать его обратно join или implode.

Я знаю, что вы хотели бы избежать взрывов, но, вероятно, быстрее, чем preg_replace_callback.

+0

Собирался опубликовать то же самое, используя 'implode', синоним' join'. –

+0

работает как шарм удивительный спасибо @ yergo –

1

Вы можете использовать preg_replace_callback():

echo preg_replace_callback("/[^,]*/", function($m) { 
    return ucfirst($m[0]); 
}, $str); 

Узор ищет ниже обсаженной буквы после границы слова и заменяет его на это верхний регистр версию.

В качестве альтернативы можно использовать array_reduce():

echo array_reduce(explode(',', $str), function($a, $b) { 
    return $a ? $a . ',' . ucfirst($b) : ucfirst($b); 
}); 
+0

спасибо, но я думаю, что выше ответ прост для понимания :) я могу положить^ –

+0

умное сокращение, забыл бой, что :) – yergo

+0

да, это экономит вам 'implode()' – hek2mgl