PHPからjavascriptへ値や連想配列を渡す手順まとめ

PHPでWeb開発をするときはPHP側からJavaScriptにデータを渡したい場面がでてきます。

データというのは例えば数値とか文字列とか連想配列とか様々です。

という訳でここでは普段PHPを使うときによく使うJavaScriptへのデータの渡し方を自分なりにまとめてみたいと思います。

PHPからJSへのデータ渡し方まとめ

PHPからJavaScriptに渡すデータの型として多いのは次の4つ

  • 数値型
  • 真偽値型
  • 文字列型
  • 連想配列

この4つの渡し方をそれぞれコード例と一緒に紹介していきます。

数値型の渡し方

数値型というのは整数とか浮動小数とかのことです。

これの渡し方は簡単でJavaScript出力時に次のようにそのまま echo するだけ

単純にそのままPHPでの変数名をそのまま出力しています。

 

そして実際に出力されるscriptタグを含めたjsコードは次の通り

特に何も問題ありません。

整数とか少数に関しては渡すのはそれほど難しくはないですね。

真偽値型の渡し方

いわゆるTRUEとかFLASEの値です。

これも数値型みたいにそのまま変数名を出力すれば渡せる・・・と良かったんですがそれはできません。

なぜなら文字列にキャストした場合にTRUEは 1 、FALSEは "" (空文字列)になってしまうからです。

 

本当にそのまま渡せないかどうかは次のコードを実行すれば分かります。

 

このコードを実行して出力されるjsコードは次の通り

TRUEが数値の1、FALSEに至っては空文字なので何も出力されていません。

 

じゃあどうすればスマートに真偽値が出力できるのか?

と探してみるとvar_exportという便利そうな関数がありました。

この関数は公式リファレンスの説明によると次のような関数です。

mixed var_export ( mixed $expression [, bool $return = FALSE ] )

var_export() は、 渡された変数に関する構造化された情報を返します。この関数は var_dump() に似ていますが、 返される表現が有効な PHP コードであるところが異なります。

引用元 : PHP.net : ver_exportより

本来は1つめの引数を出力する関数ですが、第2引数にTRUEを渡すことでそれを有効なPHPコードで使われる形式で返してくれます。

ただ単に値を返すのではなく「有効なPHPコード」で返すという点がポイントです。

 

つまりこれを使えば次のようにJavaScriptに対して真偽値を渡すことができます。

 

var_exportを使った上のコードで出力されるjsコードは次の通り

しっかり true と false になっています。

これで数値型に加えて真偽値型も渡せるようになりました。

文字列型の渡し方

文字列型はそのまま渡しちゃえばいいような気がしますが、それはできません。

なぜならそのまま渡してしまうと文字列を囲むクォートが外れてしまうからです。

 

なので文字列を渡す場合はしっかりとクォートを付けて渡すようにしましょう。

例えば次のコードのように

文字列を渡すときはシングルクォート(')またはダブルクォート(")で囲む

これを忘れなければ大丈夫です。

連想配列の渡し方

最後は連想配列の渡し方です。

これは普通に出力時に変数名で echo しようとすると文字列でないので当然エラーになります。

なのでまず出力する前にJavaScriptで有効なJSON文字列に変換しなくてはなりません。

 

データをJSONとして文字列化するにはjson_encode関数が使われます。

その関数を使ってJavaScript側にデータを渡しているのが次のコード例

json_encodeで文字列化したものを echo で出力すればOKです。

 

ちなみにこのコードから出力されるjsコードは次の通り

JavaScriptで有効なデータ形式になっていることが分かります。

連想配列の場合はデータをJS側で有効な形式にしなくてはならないので少し厄介ですね。

とはいってもjson_encode関数を挟むだけなのでそれほど面倒ではありません。

ここまでのまとめ

PHPからJavaScript側にデータを渡す方法をまとめると次の通り

  • 数値型
    変数名をそのまま echo すればOK
  • 真偽値型
    var_exportで有効なPHPコードにしてから echo で出力
  • 文字列型
    変数名を echo で出力するときにクォートで囲む
  • 連想配列
    json_encodeでJSON化してから echo で出力

それぞれの型に応じて渡し方が変わります。

 

自分自身もよくWeb開発でよく使う方法なのでまとめました。

ではでは~($・・)/~~~