PHP/文字列操作 (Strings Operations)

PHP/文字列操作 (Strings Operations)

バージョンと製造年月日

  • 2011-06-03
  • PHP5

変数展開

ダブルクォートの文字列リテラル中ではカッコに挟んだ変数が展開される

$piyo = "ぴよぴよぴよ";
$hoge = "これはぴよ→{$piyo}";  // => "これはぴよ→ぴよぴよぴよ"

連想配列をQuery String(GETパラメータ)に変換する (Hash map convert to query string GET parameters)

連想配列から一発で変換してくれる。URLエンコードも同時に完了してくれる。

$a = array(
    "hoge" => "ほげ",
    "piyo" => "ぴよ",
    "fuga" => "ふが",
);
$b = http_build_query($a);

改行コードを<br />に変換する (New Line code convert to HTML "br" tag)

プレーンなテキストの出力を画面にするときは便利

echo nl2br("
今日は
いい
天気ですね。
");

HTMLのコードをブラウザにHTMLと解釈されないように変換する

echo htmlspecialchars('<img src="hoge.jpg" />');

HTMLコードからタグを除去する

本当にタグだけがすっぽりなくなったように処理される。

echo strip_tags('<p>hogehoge</p>'); //=> "hogehoge"

配列の各要素を指定した文字列で連結して1個の文字列化する(いわゆるjoin)

$a = array("あ", "い", "う", "え", "お");
$b = join($a, ",");
echo $b;  #=>"あ,い,う,え,お"

文字列を指定した区切り文字(デリミタ)で分割して配列化する(いわゆる split)

スペース区切りの検索ワードをバラすならこんな感じ。

$hoge = preg_split("/[  ]+/u", $keyword);

見えないかもしれんが[]の中に半角スペースと全角スペースが書いてある。 UTF8のマルチバイト文字対応するにはなんか u 指定が必要なようだ。

正規表現を使う

特に理由がなければpreg系が一番汎用性もありパフォーマンスもいいみたいなのでこれ一本にしようと思う。

単純にマッチするかどうかの判定

if(preg_match('/hoge/', 'hogepiyo')){
    //まっちした
}else{
    //まっちしなかった
}

改行を含む文字列の生成

基本的な文字列生成の仕組みであるダブルクォートやシングルクォートので挟む書式はそれ自体で改行を含むことをサポートしている。 なのでわざわざ切ってドットで連結したり、1行にしてエスケープシーケンスを挟む必要は無い

$hoge = "改行も→
含めてOK
";

不思議な挙動

PHPでは識別子が解釈不能だった場合それは文字列リテラルとみなされるっぽい・・・確信ないけど。 おそらくこの挙動はシェルスクリプト等から引き継いでいると思われる。

自分は書かないけど他人が書いたコードを読むときに妙な書き方をしている場合の参考として

つまりこのように出力される

echo hogehoge; //=> hogehoge

この hogehoge の部分を文法上なんというか知らんが・・・文字列と解釈されて出力されている

当然

echo hogehoge . '123'; //=> hogehoge123

このような結合操作もできるし

$piyo = array('hogehoge' => 123);
ehco $piyo[hogehoge]; //=> 123

のように連想配列のキーとしても通用する。

しかし、解釈可能だった場合はそちらが優先される

define('hogehoge', '456');
echo hogehoge;//=> 456

キモすぎる。

Tag

php/ope/string_ope/start.txt · 最終更新: 2020-07-01 13:37 by ore