この「赤青緑ダークブルー」のような文字列を、この「赤、青、緑、ダークブルー」のように、コンマで区切られた別の文字列に分割したいと思います。
通常の関数は既に試しましたが、これは「赤、青、緑、暗い、青」を出力します。'Dark' と 'Blue' を同じタグで結合したいのですが、単語が 2 つ以上ある場合でも、最初の文字が大文字になっている他の単語を結合したいと思います。それは可能ですか?
あなたが試すことができます
$colors = "red blue green Dark Blue Light green Dark red";
$descriptors = array("dark","light");
$colors = explode(" ", strtolower($colors));
$newColors = array();
$name = "";
foreach ( $colors as $color ) {
if (in_array(strtolower($color), $descriptors)) {
$name = ucfirst($color) . " ";
continue;
} else {
$name .= ucfirst($color);
$newColors[] = $name;
$name = "";
}
}
var_dump($newColors);
var_dump(implode(",", $newColors));
出力
array
0 => string 'Red' (length=3)
1 => string 'Blue' (length=4)
2 => string 'Green' (length=5)
3 => string 'Dark Blue' (length=9)
4 => string 'Light Green' (length=11)
5 => string 'Dark Red' (length=8)
string 'Red,Blue,Green,Dark Blue,Light Green,Dark Red' (length=45)
explode()
スペースの後に大文字の最初の文字を探すループは、次のようにする必要があります。
$string = "red blue Dark Green green Dark Blue";
// preg_split() on one or more whitespace chars
$words = preg_split('/\s+/', $string);
$upwords = "";
// Temporary array to hold output...
$words_out = array();
foreach ($words as $word) {
// preg_match() ins't the only way to check the first character
if (!preg_match('/^[A-Z]/', $word)) {
// If you already have a string built up, add it to the output array
if (!empty($upwords)) {
// Trim off trailing whitespace...
$words_out[] = trim($upwords);
// Reset the string for later use
$upwords = "";
}
// Add lowercase words to the output array
$words_out[] = $word;
}
else {
// Build a string of upper-cased words
// this continues until a lower cased word is found.
$upwords .= $word . " ";
}
}
// At the end of the loop, append $upwords if nonempty, since our loop logic doesn't
// really account for this.
if (!empty($upwords)) {
$words_out[] = trim($upwords);
}
// And make the whole thing a string again
$output = implode(", ", $words_out);
echo $output;
// red, blue, Dark Green, green, Dark Blue
$words = explode(' ',$string);
$tags = '';
$tag = '';
foreach($words as $word)
{
if(ord($word >=65 and ord($word <=65))
{
$tag .= $word.' ';
}
else
$tags .= $word.',';
}
$tags = trim($tags,',').trim($tag);
print_r($tags);
私の提案は、小文字の色の辞書を持つことです。次に、辞書内の単語の後に入力文字列を検索します。ヒットした場合は、その色を出力文字列に追加し、カンマ文字を追加します。見つかった色を入力文字列から削除する必要があります。
これが私の提案です..必要な場合にのみコンマを入れます
$var = "roto One Two Three Four koko poko Toeo Towe ";
$var = explode(' ', $var);
$count = count($var);
for($i=0; $i<$count; $i++)
if( (ord($var[$i][0]) > 64 and ord($var[$i+1][0]) > 96) or ord($var[$i][0]) > 96)
$var[$i] .=',';
echo $var = implode(' ',$var);