Как заглавная первая буква после дефиса, то есть Адам Смит-Джонс

Я ищу способ прописать первые буквы / строки строки, в том числе, где имена соединены дефисом, например, adam smith-jones должен быть Adam Smith-Jones.

ucwords() (или ucfirst() если я разделяю их на имя, фамилию), только Адам Смит-Джонс

Solutions Collecting From Web of "Как заглавная первая буква после дефиса, то есть Адам Смит-Джонс"

 $string = implode('-', array_map('ucfirst', explode('-', $string))); 

Это нормально ?

  function to_upper($name) { $name=ucwords($name); $arr=explode('-', $name); $name=array(); foreach($arr as $v) { $name[]=ucfirst($v); } $name=implode('-', $name); return $name; } echo to_upper("adam smith-jones"); 

Что вы думаете о следующем коде?

 mb_convert_case(mb_strtolower($value), MB_CASE_TITLE, "UTF-8"); 

Обратите внимание, что это также обрабатывает символы с акцентом (полезно для некоторых языков, таких как французский).

Другой путь:

 <?php $str = 'adam smith-jones'; echo preg_replace("/(-)([az])/e","'\\1'.strtoupper('\\2')", ucwords($str)); ?> 
 /** * Uppercase words including after a hyphen * * @param string $text lower-case text * @return string Upper-Case text */ function uc_hyphenated_words($text) { return str_replace("- ","-",ucwords(str_replace("-","- ",$text))); } 
 <?php // note - this does NOT do what you want - but I think does what you said // perhaps you can modify it to do what you want - or we can help if you can // provide a bit more about the data you need to update $string_of_text = "We would like to welcome Adam Smith-jones to our 3rd, 'I am addicted to stackoverflow-posting' event."; // both Smith-Jones and Stackoverflow-Posting should result // may be wrong $words = explode(' ',$string_of_text); foreach($words as $index=>$word) { if(false !== strpos('-',$word)) { $parts = explode('-',$word); $newWords = array; foreach($parts as $wordIndex=>$part) { $newWords[] = ucwords($part); } $words[$index] = implode('-',$newWords); } } $words = implode(' ',$words); ?> 

Что-то похожее на это – непроверено – для того, чтобы убедиться, что я понимаю вопрос.