LoginSignup
3
0

More than 5 years have passed since last update.

文字列を改行、スペース、カンマ区切りで配列へ格納する

Last updated at Posted at 2018-03-07

改行区切りでの入力を期待していたが、カンマ区切り、スペース区切りになっていたり、前後にスペースを含んでいる。

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
)

重複も空文字も削除されます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0