Заглавные слова в PHP с настраиваемым разделителем

Мне нужен метод для заглавной буквы каждой первой буквы слова. Это то, что я получил до сих пор, и это работает почти для каждой струны ... но не работает с этой "WELLNESS & RENOMME".

    // method in stringModify Class
    function capitalizeWords($words, $charList) {

    $capitalizeNext = true;

    for ($i = 0, $max = strlen($words); $i < $max; $i++) {
        if (strpos($charList, $words[$i]) !== false) {
            $`capitalizeNext` = true;
        } else if ($capitalizeNext) {
            $capitalizeNext = false;
            $words[$i] = strtoupper($words[$i]);
        }
    }

    return $words;
    }
    // Calling method
   $stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");

Я надеюсь, что кто-то может мне помочь ... я пробовал уже 1,5 часа и понятия не имею. Заранее спасибо за любые советы или подсказки.

редактировать

ucwords() использует " " в качестве разделителя, и я хочу использовать, например, "-".

редактировать

спасибо вам всем за ваши решения. Я сейчас пойду спать, здесь 7 утра. :D Я увижу, какое решение мне больше всего нравится, когда проснусь, а затем скажу вам, какое я выбрал.

редактировать

кажется, что все функции возвращают "wellness Renomme" или "wellness & Renomme". возможно ли, что что-то в моем php.ini перепуталось?


person Paulie    schedule 13.03.2010    source источник


Ответы (1)


Я смущен тем, что именно вы пытаетесь сделать. В PHP уже есть функция ucwords(), которая может это сделать, и я не вижу никакой разницы в том, что вы re do... Если вы пишете первую букву каждого слова с заглавной буквы, имеют ли значение разделители? Имеет ли вообще значение, что между двумя словами стоит «&»?

Редактировать: кажется, теперь я понял. Я предполагаю, что единственная проблема, с которой вы столкнулись, заключается в том, что вы не можете сказать, что текст в верхнем регистре, потому что он уже весь в верхнем регистре, все, что вам нужно сделать, это сначала ввести его в нижний регистр. Я также изменил его, чтобы полностью избавиться от «следующего персонажа», в этом не было необходимости. Если вы найдете совпадение, просто измените следующий символ на верхний регистр. Попробуй это:

// method in stringModify Class
function capitalizeWords($words, $charList) {
    $words = strtolower($words); // lowercase everything that isn't capitalized
    for ($i = 0; $i < strlen($words); $i++) {
        if (strpos($charList, $words[$i]) !== false) $words[$i+1] = strtoupper($words[$i+1]);
    }
    return $words;
}
// Calling method
$stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");
person animuson    schedule 13.03.2010
comment
это возвращает мне оздоровительный Renomme. - person Paulie; 13.03.2010
comment
Это странно, теперь я понимаю, что забыл сделать первую букву заглавной, но strtoupper и strtolower не преобразовали бы '&' в ''... Я придумал альтернативный способ, но Эрик довольно хорошо его рассмотрел. Я пойду вперед и напечатаю его, хотя. - person animuson; 13.03.2010
comment
Поскольку он не позволяет мне редактировать мой комментарий: он не преобразует его в '' для меня, вы должны что-то сделать с текстом, прежде чем он достигнет функции. Я поместил его на тестовую PHP-страницу, и он вернул «wellness & Renomme». - person animuson; 13.03.2010
comment
// результат: Array ( [name] =› wellness Renomme [name2] =› WELLNESS & RENOMME ) // Вызов метода: $hsql_results[name] = $strMod-›capitalizeWords($dummy, ' -&'); $hsql_results[имя2] = $пустышка; я не понимаю, ни одна функция в Интернете не работает для этой строки на моем компьютере. :-D - person Paulie; 13.03.2010