非文字列 (int や boolean など) にしたい値がソース配列にそのまま入力されていることを確認します。
<?php
$a = array('id' => 1, 'really' => true, 'somevalue' => 'text');
var_dump( json_decode( json_encode( $a ) ) );
期待される:
object(stdClass)#1 (2) {
["id"]=>
int(1)
["really"]=>
bool(true)
["somevalue"]=>
string(4) "text"
}
編集
常に文字列にしたい場合は、最初に文字列を配列に入れます。
<?php
$a = array('id' => '1', 'really' => 'true', 'somevalue' => 'text');
var_dump( json_decode( json_encode( $a ) ) );
与えるだろう
object(stdClass)#1 (3) {
["id"]=>
string(1) "1"
["really"]=>
string(4) "true"
["somevalue"]=>
string(4) "text"
}
しかし、それは異なる変数型を持つという目的全体を殺します。
jsonエンコーディングの前に配列を変換できます:
<?php
$a = array('id' => 1, 'really' => true, 'somevalue' => 'text');
$tmp = array();
foreach( $a as $key=>$val ) {
$tmp[$key] = (string)$val;
}
var_dump( json_decode( json_encode( $tmp ) ) );
最終的には次のようになります。
object(stdClass)#1 (3) {
["id"]=>
string(1) "1"
["really"]=>
string(1) "1"
["somevalue"]=>
string(4) "text"
}