回答:
array_mapを使用すると、次のことができます。
$new_arr = array_map('trim', explode(',', $str));
改善された答え
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange');
結果:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
この
red
てみてください*red*
。/(\ s *、\ s *)+ /
以下は、入力文字列の開始/終了時の空白も処理します。
$new_arr = preg_split('/\s*,\s*/', trim($str));
そして、これはすべての賢明な位置に空白がある最小のテストです:
$str = ' first , second , third , fourth, fifth ';
$new_arr = preg_split('/\s*,\s*/', trim($str));
var_export($str);
array_map
と正規表現ソリューションは同じ結果を生成するので、誰かがそのパフォーマンスを比較できますか?
私が思いついた既存の回答にいくつかのプリンシパルを組み合わせることで
preg_split ('/\s*,+\s*/', 'red, green thing ,, ,, blue ,orange', NULL, PREG_SPLIT_NO_EMPTY);
その背後にある理由は、この回答にバグを見つけたことです。文字列の末尾にコンマがあると、配列内に空白の要素が返されます。すなわち
preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red, green thing ,, ,, blue ,orange,');
結果
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
[4] => ''
)
これを修正するには、この回答で述べたようにPREG_SPLIT_NO_EMPTYを使用してこれを削除しますが、一度実行すると、技術的には正規表現を介して連続するコンマを削除する必要がないため、短縮された式
これを試して:
$str = preg_replace("/\s*,\s*/", ",", 'red, green, blue ,orange');
preg_replace()
文字列から配列を生成しません。これは間違った質問に対する正しい答えです。反対投票。
$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
マイナーな修正により回答がリハビリ
特異的に OPのサンプル文字列のため、各サブストリングが一致するので、単一の言葉では、使用することができます)(str_word_countを。
コード:(デモ)
$str = ' red, green, blue ,orange ';
var_export(str_word_count($str,1)); // 1 means return all words in an indexed array
出力:
array (
0 => 'red',
1 => 'green',
2 => 'blue',
3 => 'orange',
)
これは、文字マスク/ 3番目のパラメーターに必要な文字を追加することにより、文字(および一部のハイフンとアポストロフィ-細字を読む場合)を超えた部分文字列にも適応できます。
コード:(デモ)
$str = " , Number1 , 234, 0 ,4heaven's-sake , ";
var_export(str_word_count($str,1,'0..9'));
出力:
array (
0 => 'Number1',
1 => '234',
2 => '0',
3 => '4heaven\'s-sake',
)
繰り返しますが、サンプル文字列のため、この質問は非常に狭く扱っていますが、これにより同じ望ましい出力が得られます。
コード:(デモ)
$str = ' red, green, blue ,orange ';
var_export(preg_match_all('/[^, ]+/',$str,$out)?$out[0]:'fail');
そのためにpreg_split()を使用できます。
$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);
/* Result:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
*/
$str = str_replace(" ","", $str);
\t\n\r\0\x0B
もまたトリムします
トリミングして爆発
$ str = '赤、緑、青、オレンジ';
$ str = trim($ str);
$ strArray = explode( '、'、$ str);
print_r($ strArray);