2

誰もこれに対するPHPソリューションを持っていますか?

目標は、これらを取る関数を持つことです

HELLO WORLD ハローワールド ハロー IBM

これらを返します

ハローワールド ハローワールド ハロー IBM

それぞれ。

4

2 に答える 2

3

スコットランドのマクドナルド氏は自分の名前をそのように大文字にすることを好み、アイルランドのマクドナルド氏はそのようにすることを好みます。ファイル内の単語だけでなく、より多くの文脈を必要とする、あなたが言及している紳士を事前に知らなければ、どれが「正しい」かを知るのはちょっと難しい.

また、BBC (または BBC ですか?) は、Nasa や Nato などの名前のつづりを使用しています。それは私を悩ませます。激しく嫌いです。しかし、それは彼らが最近やっていることです。アクリノム (または「イニシャル」と呼ぶ人もいます) は、いつそれ自体が単語になるのでしょうか?

于 2012-05-28T00:36:33.180 に答える
2

これはちょっとしたハックですが、大文字にしたい頭字語のリストを保存してから、文字列内の単語を のリストと比較することができます$exceptions。ジョナサンは正しいですが、その名前が頭字語ではなく、使用している場合、このソリューションは役に立ちません。しかし、明らかに、スコットランドのマクドナルド氏が正しい場合は変わりません。

See it in action

<?php
$exceptions = array("to", "a", "the", "of", "by", "and","on","those","with",
                    "NASA","FBI","BBC","IBM","TV");

$string = "While McBeth and Mr MacDonald from Scotland
was using her IBM computer to watch a ripped tv show from the BBC,
she was being watched by the FBI, Those little rascals were
using a NASA satellite to spy on her.";

echo titleCase($string, $exceptions);
/*
While McBeth and Mr MacDonald from Scotland
was using her IBM computer to watch a ripped TV show from the BBC,
she was being watched by the FBI, Those little rascals were
using a NASA satellite to spy on her.
*/

/*Your case example
  Hello World Hello World Hello IBM, BBC and NASA.
*/
echo titleCase('HELLO WORLD hello world Hello IBM, BBC and NASA.', $exceptions,true);


function titleCase($string, $exceptions = array(), $ucfirst=false) {
    $words = explode(' ', $string);
    $newwords = array();
    $i=0;
    foreach ($words as $word){
        // trim white space or newlines from string
        $word=trim($word);
        // trim ending coomer if any
        if (in_array(strtoupper(trim($word,',.')), $exceptions)){
            // check exceptions list for any words that should be in upper case
            $word = strtoupper($word);
        } else{
            // convert to uppercase if $ucfirst = true
            if($ucfirst==true){
                // check exceptions list for should not be upper case
                if(!in_array(trim($word,','), $exceptions)){
                    $word = strtolower($word);
                    $word = ucfirst($word);
                }
            }
        }
        // upper case the first word in the string
        if($i==0){$word = ucfirst($word);}
        array_push($newwords, $word);
        $i++;
    }
    $string = join(' ', $newwords);
return $string;
}
?>
于 2012-05-28T01:30:39.940 に答える