こんにちは、沼田です。
今回はPHPネタを投稿します。
ここしばらくは開発上、JavaScriptフレームワークのjQueryや、そのプラグインを用いることが多いです。
jQueryプラグインの方でAjax通信を使って、PHPサーバからJSON化したデータを取得するケースがありますが、PHPサーバ側で配列データをJSON化して出力する時は、気をつけないと意図した結果と異なりjQueryプラグイン側でエラーになってしまいます。
まずは、以下のPHP配列をご覧ください。
■配列1
array(3) {
[1] => string(5) "data1"
[3] => string(5) "data2"
[9] => string(5) "data3"
}
これをjson_encode()を使ってJSON形式にエンコードします。
すると以下のようなエンコード結果が得られます
{"1":"data1","3":"data2","9":"data3"}
では、次のような配列はどうでしょう。
■配列2
array(3) {
[0] => string(5) "data1"
[1] => string(5) "data2"
[2] => string(5) "data3"
}
これをjson_encode()を使ってJSON形式にエンコードします。
すると以下のようなエンコード結果が得られます
["data1","data2","data3"]
配列1の時と配列2の時で、出力結果が違いますね。
2つのPHP配列の違いは一見して無いように見えますが、よく見ると以下のような違いがあります。
- 配列1・・・・・キーが連番でない
- 配列2・・・・・キーが連番である
jQueryプラグインによっては、配列1のようにキーが連番ではない配列をJSON化したデータを受け取ると、エラーになってしまうものがあります。
あらかじめ、PHP配列のキーが連番になるようにすれば済む話ですが、処理の途中で配列の一部のキーを削除したい時もあるかと思います。
そういった場合に、ループでキーを振りなおすのは面倒です。
前置きが長くなりましたが、そこでキーが歯抜け、バラバラになった配列を連番にする方法の出番です。
array_merge()は通常、複数の配列をマージする目的で使用されるケースが多いと思います。
ですが、array_merge()関数の引数に、キーが歯抜けになっている配列1のような配列を指定してあげることで、配列2のようなキーが連番になった配列に変換することができます。
実行例)
< ?php
$data = array(
1 => "data1",
3 => "data2",
9 => "data3"
);
$data = array_merge($data);
?>
上記実行例の$dataをvar_dump()した時の出力結果は以下のようになり、キーが連番になっていることが分かります。
array(3) { [0] => string(5) "data1" [1] => string(5) "data2" [2] => string(5) "data3" }
また、$dataをjson_encode()を使ってJSON形式にエンコードすると、以下のようなエンコード結果が得られます。
["data1","data2","data3"]
是非お試しください。