空の配列を取り除く?~「array_filter」と「array_values」を組み合わせる~
こんにちわ!プログラマーのどっぴーです^^
現在開発中のツールで、簡単に導入できて感動した!関数をご紹介します。
今回使ったphpの関数は、「array_filter」「array_values」です。
テキストエリアの入力値を取得し、改行ごとに配列に分ける、という処理を組んでいる時のこと。
空白行があった場合に後の処理で不具合が起こることに気が付きました。
以前に学習した「配列の中身が空の部分を削除するarray_filter」を使えば、たった1行のコードで不要箇所を削除できるのでは?と考えいざ実験。
検証のため、テキストエリア内の3行目に、なにも入力をせずに改行している箇所を用意しました。
//テキストエリアの入力値 //1行目:AAA //2行目:BBB //3行目: //4行目:CCC //改行区切りで配列化 $str_array = explode("\n", $textarea); //配列の中身 //$str_array[0]=>AAA //$str_array[1]=>BBB //$str_array[2]=> //$str_array[3]=>CCC
「array_filter」を適用し、$new_arrayの中に格納します。
$new_array = array_filter($str_array); //関数適用後の中身↓↓ //$new_array[0]=>AAA //$new_array[1]=>BBB //$new_array[3]=>CCC
不要な空項目は消えてくれましたが、配列のキーが連番になっていません。
今回開発中のツールでは配列のキーを取り出して処理をする必要がありました。
キーの再割り振りが可能なのか調べたところ、「array_values」の関数を発見しました。
$new_array = array_values(array_filter($str_array)); //関数適用後の中身↓↓ //$new_array[0]=>AAA //$new_array[1]=>BBB //$new_array[2]=>CCC
array_valuesは「配列の値をすべて取り出す」という処理を行なっているんだとか。
既存のキーを無視して、データの数だけ数字キーを振り直すそうです。
連想配列の場合、(文字列の)キーはどうなるのか検証。
//連想配列の場合のテスト $str_array = array('test1'=>'AAA', 'test2'=>'BBB', 'test3'=>'', 'test4'=>'CCC'); $new_array = array_values(array_filter($str_array)); //関数適用後の中身↓↓ //$new_array[0]=>AAA //$new_array[1]=>BBB //$new_array[2]=>CCC
もともと設定していたキーを無視して「0」から振り直しが行われました。なるほどなー。
改行区切りのデータの取り扱いって、何かしら使う機会があると思います。
今回紹介した2つの関数を使えば、エラーを出さずにスルーできるので、ユーザビリティ向上にも繋がります!ぜひ導入してみましょう。
入力の際に「データが不正です!」みたいなバリデーションエラーを出すと、使う側からすると煩わしいですしね。
ではまた~(;´∀`)ノ