題名の通りですが、POSTで「改行」を含むデータを受け取り、「改行」を含めて表示する方法です。
Excel のデータを貼り付けて Web ページに表示するようなことを想定しています。
Excel 上のデータをコピ-して Web アプリ上にペーストしてデータを取り込みたい
Web アプリにデータを取り込む手段はいろいろありますが、私が開発したい Web アプリは Excel ファイルをコピペしてデータを取り込むようにしたいと考えています。
その理由は
- 簡単
- どんな感じで貼り付けたのかすぐ分かる
- どんなデータを取り込もうとしているのかすぐ分かる
だからです。
例えば下図のようなデータを想定しています。
textarea でデータを取り込む
textarea でデータを取り込みます。
[root@cent07 html]# vi post.php |
表示する際は「nl2br」で「テキストエリア」の「改行」を「<br>」に変換させます。
[root@cent07 html]# vi ResPost.php |
Web プログラムを実行する
Excel のデータをコピーします。
Web アプリのテキストエリアに貼り付けて「送信」ボタンをクリックします。
以下のようにデータが改行されています。
更にスペースも入っているので1つ1つのデータを取り出すことが出来そうです。
表示結果の隙間は「空白」か?「Tab」か?
上図の表示結果で「値」と「値」の間に隙間がありますが、これは「空白」なのか「Tab」なのか確認します。
上図の結果をコピーして「エディタ」に貼り付けて確認しました。
その結果「値」と「値」の隙間は「Tab」で区切られていることが分かりました。
これで「Tab」ごとに値を取り出して変数に代入したり、データベースに格納したりしていろいろと利用できるようになります。
更にタブ区切りのデータを配列に格納する
更にタブ区切りのデータであることが分かったので explode 関数でタブ区切りを試します。
タブ区切りしたデータを「print_r」と「var_dump」で出力します。
[root@cent07 html]# vi ResPost.php <!DOCTYPE html> |
プログラム実行結果
数がプログラムの実行結果ですが、よく見ると「改行」でデータが分割されていません。
目標は下図の Excel の表のように二次元配列で出力させることです。
Excel データを二次配列に格納するプログラム
最終的に以下のように Excel のデータをコピペして二次元配列に格納するプログラムを作成しました。
[root@cent07 html]# vi ResPost.php <?php
echo “「print_r」の場合<br>”; print_r(explode(“\t”, $data));
echo “「var_dump」の場合<br>”; var_dump(explode(“\t”, $data));
echo “splitで分割して配列に代入する<br>”;
$two_ary = array(array()); for ($i=0; $i<count($array); $i++){ echo “<br>”;
echo “var_dumpで two_ary を表示<br>”; echo “<br>”;
echo “for で二次元配列 $two_ary を表示<br>”; ?> |
Excel のデータをコピーします。
データをコピペして「送信」ボタンをクリックします。
以下のように出力されます。
ただし「Notice: Array to string conversion in /var/www/html/ResPost.php on line 40」のメッセージが出力されました。
「Error」や「Warning」ではありませんが、軽い注意ということでしょうか。
Notice: Array to string conversion in /var/www/html/ResPost.php on line 40
「Notice: Array to string conversion in /var/www/html/ResPost.php on line 40」の原因について調べたところ、「空行が混ざっているのが原因」であることが分かりました。
Ecxel のデータを選択してコピペした時に、下図のスペースに空行が1つ入っていました。
var_dumpで確認すると、確かに一番最後に空の配列が入っていることが確認できます。
この空行を二次元配列に入れないようにするように改修します。
→続きます。
参考サイト
PHPで文字列を分割する2つの方法(特定の文字列で区切る-explode)
コメント