 
ショコラ
PHP 文字列を単語で分割するには?
『スペースで区切られた文字列があります。 スペースで区切って単語を取り出したいのですが、ダブルクォートで括られた箇所はスペースを繋げて取り出したいです。 このプログラムをPHPでmbストリング系の関数を使って書きなさい。』
 
もっさん先輩
<?php
function extractWords($inputString) {
  $words = [];
  $quoteOpen = false;
  $word = '';
  $delimiter = ' ';
  $stringLength = mb_strlen($inputString);
  for ($i = 0; $i < $stringLength; $i++) {
    $char = mb_substr($inputString, $i, 1);
    if ($char === '"') {
      $quoteOpen = !$quoteOpen;
    } elseif ($char === ' ' && !$quoteOpen) {
      if ($word !== '') {
        $words[] = $word;
        $word = '';
      }
    } else {
      $word .= $char;
    }
  }
  if ($word !== '') {
    $words[] = $word;
  }
  return $words;
}
$inputString = 'This is a "sample string" for testing';
$words = extractWords($inputString);
foreach ($words as $word) {
  echo $word . "\n";
}
?>上記のコードでは、extractWords関数を定義し、指定された文字列から単語を抽出するロジックを実装しています。$inputString変数にはスペースで区切られた文字列を指定してください。抽出された単語は、$words配列に格納され、foreachループを使用して1つずつ表示されます。
私は全角スペースでも区切れるように、少し手を加えました。
  // 文字列をスペースで単語に分割します。
  public static function extractWords($inputString)
  {
    $words = [];
    $quoteOpen = false;
    $word = '';
    $len = mb_strlen($inputString);
    for ($i=0; $i < $len; $i++) {
      $char = mb_substr($inputString, $i, 1);
      if ($char === '"') {
        $quoteOpen = !$quoteOpen;
      }
      elseif (in_array($char,[' ',' '],true) && !$quoteOpen) {
        if ($word !== '') {
          $words[] = $word;
          $word = '';
        }
      }
      else {
        $word .= $char;
      }
    }
    if ('' !== $word) {
      $words[] = $word;
    }
    return $words;
  }以上
