![見出し画像](https://assets.st-note.com/production/uploads/images/91811563/rectangle_large_type_2_1ad31aaaabca6920a1171bd4caa99157.jpeg?width=800)
プログラム言語の関数などの解説で、あまり例に出ないものを書きとめたい
使い方の例をたくさんストックしたい
プログラムの言語公式サイトには関数の説明もあり、使い方の例はあるていど書いてあります。
ですがその例は典型的なものがほとんどなので、そうではないパターンを自分用メモに書いていこうかなと思っています。
なぜそう思ったか
私は割と疑り深いので“例にのっていないもの”は「やってみないと分からない」と書いて実行してみるほうなのですが…
それでも、珍しい例について「こういう風になるよ!」という例が書かれていると、実行する前に「少なくとも1人は確認してるってことだね」とちょっと安心したりするので、そういうものを貯めたいと思いました。
ただ珍しい例はやはり利用例が少ないので、実際動かしてみると結果が違うこともたまにあるので、確かめるために「そこだけ抜き出して実行してみる」は、やった方がいいですね。
(まれにOSやバージョン等の環境が違うだけで挙動が違うこともあります。不特定の人が使う可能性があるプログラムには、そういう関数は使わない方がいいです)
例えばPHPのexplode
explode関数は「文字列を『指定文字列』で配列に分割する」関数ですが、私が調べた範囲では、例として書かれているものは「文字列を『指定文字』で配列に分割する」ものばかりでした。
“,”で区切られたcsvデータを配列にするなどです。
でも私の仕事では、入力された文章から特定の情報を抜き出すために単一文字ではなく文字列で分割したいことがそれなりにありました。
分割したいのがフォームなどから取得した「文章」なので、区切り文字列を全角文字列にしたいわけです。
と、いうわけでテストしてみました。
コード
$str = 'explode test てすと テスト';
$splitter = 'てすと';
echo "<pre>\n";
$result = explode($splitter, $str);
print_r($result);
echo "要素のバイト数\n";
foreach ($result as $k => $r) {
$len = strlen($r);
echo "[", $k, "]\t", $len, "\n";
}
echo "</pre>\n";
utf8での結果
Array
(
[0] => explode test
[1] => テスト
)
要素のバイト数
[0] 13
[1] 10
eucまたはshift-jisでの結果
Array
(
[0] => explode test
[1] => テスト
)
要素のバイト数
[0] 13
[1] 7
マルチバイト文字列でも問題なく分割できていますね。
ただし、フォームからデータを受け取るときなどで、入力される文字列と処理系の文字コードが異なる場合、うまく分割できないことがあります。サーバはEUCだがプログラムはutf8で書いている、などの場合です。
そのばあい、mb_internal_encoding関数で文字コードを指定したり、入力された文字列の文字コード変換が必要になります。
やはり例をたくさんストックしたい
と、いう感じで、自分がよく使う・疑問に思った関数で「やってみないと分からない」をできるだけ複数の環境でやってみて、注意点をメモしていきたいと思いました。
主に自分のためですが、同時に誰かの役にも立てれば嬉しいですから。
そのうちどこかにまとめて行こうと思っています。
この記事が気に入ったらサポートをしてみませんか?