改行区切りでの入力を期待していたが、カンマ区切り、スペース区切りになっていたり、前後にスペースを含んでいる。
panda
cat
dog, cow
elephant squirrel
cat,
dog
区切る & トリム & 空文字除去 & 重複除去
// delimiterが複数あるので、explode でなく正規表現を使う。
// \R は \r\n, \r, \n を含む
$array = preg_split('/\R|,| /m', $array);
// 配列の各要素にtrim関数を適用
$array = array_map('trim' $array);
// 空文字("")を除去
$array = array_filter($array);
// 重複を除去
$array = array_unique($array);
// 添え字を振り直す(飛び飛びになっているので)
$array = array_values($array);
関数化すると、
/*
* テキストエリアからの入力を、スペース、タブ、改行で区切って配列で返す
*
* @param string $text
* @param array $seperators
*
* @return array $arr
*/
function text2array($text, $seperators=[',', ' ', '\R']) {
$seperator = implode('|', $seperators);
$pattern = "/{$seperator}/m";
// 区切り & トリム & 空文字除去 & 重複除去 & 添え字振り直し
$arr = preg_split($pattern, $text);
$arr = array_map('trim', $arr);
$arr = array_filter($arr);
$arr = array_unique($arr);
$arr = array_values($arr);
return $arr;
}
結果
_GETで入力を受け取ると以下のようになっている
$text = "panda\r\ncat\r\n\r\ndog, cow\r\n\r\n elephant squirrel\r\n\r\n cat,\r\ndog";
$array = text2array($text);
変換して出力
php > print_r($array);
Array
(
[0] => panda
[1] => cat
[2] => dog
[3] => cow
[4] => elephant
[5] => squirrel
)
重複も空文字も削除されます。