0

この「赤青緑ダークブルー」のような文字列を、この「赤、青、緑、ダークブルー」のように、コンマで区切られた別の文字列に分割したいと思います。

通常の関数は既に試しましたが、これは「赤、青、緑、暗い、青」を出力します。'Dark' と 'Blue' を同じタグで結合したいのですが、単語が 2 つ以上ある場合でも、最初の文字が大文字になっている他の単語を結合したいと思います。それは可能ですか?

4

5 に答える 5

0

あなたが試すことができます

    $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)
于 2012-09-26T17:09:48.417 に答える
0

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
于 2012-09-26T16:59:40.297 に答える
0
$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);
于 2012-09-26T17:04:59.640 に答える
0

私の提案は、小文字の色の辞書を持つことです。次に、辞書内の単語の後に入力文字列を検索します。ヒットした場合は、その色を出力文字列に追加し、カンマ文字を追加します。見つかった色を入力文字列から削除する必要があります。

于 2012-09-26T17:07:30.203 に答える
0

これが私の提案です..必要な場合にのみコンマを入れます

$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);  
于 2012-09-26T17:36:26.393 に答える