ゆろぐ

ゆるく、ろぐる。独学フロントエンドエンジニアの技術ブログ

ゆろぐ

ゆるく、ろぐる。独学フロントエンドエンジニアの技術ブログ

【WordPress】phpのexplodeで「改行」ごとに分割する方法

どうしても休日は暇を持て余して(平日でも暇だと錯覚して)良くない遊びをしてしまう・・・。どうにかしてもっと健全な生活ができないのだろうか。

と長年悩んでいるのですが、もういっそのこと休みを無くせばいい。という発想から、週末は農業のアルバイトを始めてみました。

あ、良くない遊びは法律に触れるとかそういうことではなく、自分のためにもならないし、楽しいとも思っていないのにダラダラとやってしまうギャンブル(パチスロとか)のことです。笑

ってことで本題に入っていきましょう。

WordPressテーマ開発で何かと使うimplode,explode

WordPressのテーマ開発をしている人であれば、きっとは一度は使ったこと(見たこと)あるであろう「implode」と「explode」

特定の区切り文字を指定することで、その文字列を基準に配列にしたり、配列から展開してくれる便利な関数です。

個人的には「implode=入れる・格納する」ってイメージがあるのでいつもimplodeが配列を作る方だと勘違いしてしまうのですが、配列にするのはexplodeの方です。

ちょっと気になったのでGoogle先生に聞いてみたら「implode = 爆裂する」って意味らしい。配列爆破して展開しているってことですね。

じゃあexplodeはどんな意味だって思ってGoogle先生に尋ねてみたら「explode = 爆発する」だそう・・・。これだから英語ってやつは嫌いなんだ。

implode,explodeの基本的な使い方

始めて使う人のためにまずは簡単に使い方のご説明。

implodeの使い方

PHP
$array = ['a','b','c','d'];

$expandedArray = implode(',',$array);

echo $expandedArray; // a,b,c,d
PHP

implodeは配列を特定の文字列で区切りながら展開する関数です。

1行目は配列を設定

3行目で$expandedArrayの中に$arrayの要素を「,」で区切りながら展開しています。

5行目は展開したものを出力

priority_high

PHP8ではimplode($array,$separator)は使えなくなりました

PHP7の頃はimplode(‘,’,$array)でもimplode($array,’,’)でもどちらでも動きましたが、PHP8以降は先にseparator(区切り文字)を指定する必要があるので注意しましょう!

今回の例ではカンマを区切り文字に使用していますが、文字列を入れたくなければ''と空にすることで文字の連結をすることもできます。

上手く使い分けることによって<li>タグなどで囲って、<ul>や<ol>の中身を動的に作成する場合にも使えます。(#ループで回せ)

explodeの使い方

explodeも基本的にはimplodeと使い方は同じです。

PHP
$text = 'a,b,c,d';

$array = explode(',',$text);

var_dump($array); // ['a','b','c','d'] 配列で返ってきます
PHP

処理する変数と戻り値が逆になるだけで、implodeとexplodeの基本的な使い方は一緒なので、ちょくちょく間違えてしまいやすいポイント。わからないときはechoなりvar_dumpなりで中身出力してみて、エラーが出るか出ないかでチェックしてみてください。

個人的にはimplodeよりもexplodeの方が利用頻度は高いと思います。

例えばcsvファイル的なカンマ区切りの文章を一度配列にした方が処理をしやすかったり、$_GET[”]で取得したパラメータを処理したり・・・etc

カンマだけではなく任意の文字列で分割できるのでHTML要素を分割することもできます。

ここで本題。改行コードで分割したいってときはどうする?

分割する文字列が目にみえるものであれば使い方は簡単に想像できます。目に見えないものでも「 」スペースのようなものであればexplode(' ',$text)で対応できそう。(半角・全角の違いはある)

では改行コードは・・・?

この改行コードって、結構厄介な存在で使用しているパソコンのOSによって改行コードが違うので、カンマなどのように一個の文字で指定することができません。

そのため、正規表現を使って各OSの改行コードを特定の(一つの)改行コードにまとめてから、explodeで分割をします。

PHP
$str = str_replace(array('\r\n', '\r', '\n'), '\n', $str);
$array = explode('\n',$str);
PHP

1行目で$strに入っている文字列の中にある改行コードを、すべてunixで使われている'\n'に変換しています。

2行目では変換した改行コード'\n'を使ってexplodeで分割しています。

どんな時に使えるのか?

ここまで検索している人なら、すでに使いたいことがあると思いますが、もし、万が一、億が一にこのブログの読者の方がアーカイブや新着記事としてここまで読んでくれている場合、使う場面が想像できない可能性もあると思います。

使用場面は色々あると思いますが、個人的に多いのは「カスタムフィールド」を多用する案件の時です。

例えばお客様(実際にWordpressの管理画面から投稿する人)がHTMLが書けない人、もしくはなるべくノーコードで実装したいような場合、カスタムフィールドをもとにして投稿ページを作ることも多いですよね。

ACFproやSmart Custom Fields、Custom Field Suiteなどの繰り返し機能がある場合は問題ないのですが、繰り返し機能が使いないときなどに改行コードによる処理を入れることがあります。

テキストエリア(input要素ではなくtextarea要素)の入力欄を用意して、そこにリストにしたい内容を箇条書き(1項目1行)にしてもらい、それを出力するときにphpで配列にしてループで回せば<ul>リストや<ol>リストとしても簡単に出力でき、入力する人もHTMLがないのでわかりやすくなります。

セキュリティ的な問題から指定されたプラグインしか使えない場合など、導入する場面は限られていますが、覚えておくと損はないと思います。

まとめ

どんどん便利な世の中になり、Wordpressにもたくさんのプラグインがあるので、こういったコードを書くことも少なくなっていますが、プラグインの怖いところはいつ開発が終わるのかわからないということ。

特に開発終了とPHPのバージョンが切り替わるタイミングが近いともうお手上げの時もあるかもしれませんね・・・。

有名なプラグインで収益化ができているものであれば継続的な利用もできると思いますが、使う側としては「無料」であることが何よりも魅力的なもの。

なくなっては困るプラグインにはコーヒー一杯の支払いでもいいから投げ銭をしておいた方が、自分にとってもいいのかもしれません。

コーヒー一杯分も無駄にしたくない、プラグインを使わずにテーマ側でカスタムフィールドを設定することが多い人の場合は、こういった方法も是非ご参考にしてください。

【WordPress】phpのexplodeで「改行」ごとに分割する方法

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

トップへ戻る