このサイト[https://suin.io/399]を読んだんですが、空の要素がなぜノイズとして入ってしまうのか理解できませんでした。
マニュアルなどを読みましたが、触れられてないみたいで、とても気になります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
これは、「分割につかった文字は空文字になり、それはexplode,splitの出力でも空要素として残る」ということでしょうか?
違います。分割の結果、空文字になります。
"aaa,
(ここが空文字列)
bbb,
(ここが空文字列)
ccc
ddd,
eee"
「カンマまたは空白」で区切るのでなく、「カンマまたは空白の連続」で区切るといいです。
PHP
1$tags = split('[ ,]+', $tags); // この関数は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。 2$tags = preg_split('/[ ,]+/', $tags);
元のままの正規表現で、preg_split
のオプションを使って、こんな方法もありますが、上の方法の方が良いでしょう。
PHP
1$tags = preg_split('/ |,/', $tags,NULL,PREG_SPLIT_NO_EMPTY);
投稿2017/09/08 22:49
総合スコア86285
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「ノイズとして入ってしまう」方法で配列化しているからです。
「aaa ,
bbb ,
ccc
ddd ,
eee 」← グレーの部分で分割しているので値がないものもある。
PHP
1$tags = "aaa, bbb, ccc ddd,eee"; 2var_dump( preg_split('/ |,/', $tags) ); 3/* 4array(7) { 5 [0]=> 6 string(3) "aaa" 7 [1]=> 8 string(0) "" 9 [2]=> 10 string(3) "bbb" 11 [3]=> 12 string(0) "" 13 [4]=> 14 string(3) "ccc" 15 [5]=> 16 string(3) "ddd" 17 [6]=> 18 string(3) "eee" 19} 20*/
ちなみに記事に書かれている split は削除されました。
【PHP: split - Manual】
http://php.net/manual/ja/function.split.php
警告
この関数は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。
この関数の代替として、これらが使えます。
preg_split()
explode()
str_split()
投稿2017/09/08 19:50
総合スコア69625
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
split のマニュアルだと合致する箇所は、以下です。
pattern が n 回 現れる場合、返される配列には、 n+1 個のアイテムが 含まれます。例えば、pattern が現れない場合、 1 個の要素のみを有する配列が返されます。もちろん、これは エラーを生じた場合、split() は FALSE を返します。
以下のスクリプトで空配列の位置を確認し、どのように分解されているかわかると理解しやすいと思います。(split の後継の preg_split を使用しています。)
php
1<?php 2$tags = "aaa, bbb, ccc ddd,eee"; 3$tags = preg_split('/ |,/', $tags, -1, PREG_SPLIT_OFFSET_CAPTURE); 4var_dump($tags); 5 6// 7array(7) { 8 [0]=> 9 array(2) { 10 [0]=> 11 string(3) "aaa" 12 [1]=> 13 int(0) 14 } 15 [1]=> 16 array(2) { 17 [0]=> 18 string(0) "" 19 [1]=> 20 int(4) 21 } 22 [2]=> 23 array(2) { 24 [0]=> 25 string(3) "bbb" 26 [1]=> 27 int(5) 28 } 29 [3]=> 30 array(2) { 31 [0]=> 32 string(0) "" 33 [1]=> 34 int(9) 35 } 36 [4]=> 37 array(2) { 38 [0]=> 39 string(3) "ccc" 40 [1]=> 41 int(10) 42 } 43 [5]=> 44 array(2) { 45 [0]=> 46 string(3) "ddd" 47 [1]=> 48 int(14) 49 } 50 [6]=> 51 array(2) { 52 [0]=> 53 string(3) "eee" 54 [1]=> 55 int(18) 56 } 57}
|a|a|a|,| |b|b|b|,| |c|c|c| |d|d|d|,|e|e|e| 0 1 2 3 4 5 6 7 8 9101112131415161718192021
投稿2017/09/09 06:05

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。