こんな時に使えます
とあるDBのテーブル内で、複数の要素(例でいうと、職業とステータス)が、
ひとつの文字列に連結されてしまっている場合に、
・分離して
・区切りに使われている記号を取り除いて
・取得
ができる。
実例
$sample_text = "勇者[HP300]"
分離する
$sample_text_extract = strstr($sample_text, '[');
// 変数の中身は、[HP300]という文字列
【解説】
strstr()
https://www.php.net/manual/ja/function.strstr.php
第一引数:対象の文字列
第二引数:検索したい文字
返り値: 検索したい文字を含んだ、文末までの文字列
区切りに使われている文字を取り除く
$replace = [
'[' => '',
']' => ''
];
$sample_text_trimmed = strtr($sample_text_extract, $replace);
// 変数の中身は、HP300 という文字列
【解説】
strtr()
https://www.php.net/manual/ja/function.strtr.php
第一引数:対象の文字列
第二引数:置換before/after(※配列形式で複数指定可)
※公式ドキュメントでは、小文字を大文字に置換するやり方が紹介されています。
バイト数の大きいものが優先される等ルールがあるようです。
<?php
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>
// 結果: hello all, I said hi
引数を二つだけ渡す場合は、二番目の引数を array('from' => 'to', ...) 形式の配列にしなければなりません。 返される値は文字列で、もとの文字列中にある配列のキーと同じ部分を対応する値で置換したものとなります。 一番長いキーから順に調べます。一度部分文字列の置換を行うと、 置換後の文字列がさらに置換の対象となることはありません。
筆者コメント
私は、例のように、
・文字列が記号で囲まれて
・かつ他の文字列と連結して、
・ひとつのカラムに保存されている
というデータを取り出す必要性があり、この合わせ技を使いました。
他にもいろんな使い方ができそうですので、何かのヒントになれば幸いです。