Help us understand the problem. What is going on with this article?

【PHP】strstr() と strtr() の合わせ技で、文字列内の複数文字を置換する

こんな時に使えます

とある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', ...) 形式の配列にしなければなりません。 返される値は文字列で、もとの文字列中にある配列のキーと同じ部分を対応する値で置換したものとなります。 一番長いキーから順に調べます。一度部分文字列の置換を行うと、 置換後の文字列がさらに置換の対象となることはありません。

筆者コメント

私は、例のように、
・文字列が記号で囲まれて
・かつ他の文字列と連結して、
・ひとつのカラムに保存されている
というデータを取り出す必要性があり、この合わせ技を使いました。
他にもいろんな使い方ができそうですので、何かのヒントになれば幸いです。

ohara5555
サーバーサイドエンジニアです。PHP+Laravelでポートフォリオ作成中。 興味のある技術:AWS,Heroku,Docker,Golang Twitterやっています。 https://twitter.com/ohara5555
https://vamola.info/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away