2

PHP配列をJavaScript配列にjson_encodeする必要があります。残念ながら、私が使用している jQuery ライブラリは、文字列ではなく整数が含まれている場合、その配列を適切に処理しません。

ほとんどの場合、これにより、文字列のみを含む適切な配列が生成されます。

json_encode($data)

数字だけが含まれている場合でも$data、通常は次のようになります。

["3","7","8"]

ただし、時々、次のような結果が得られます (ゼロに注意してください)。

["9691","1792","26","1","4","15",0,"1"]

またはこれ

[16171,15470,10390,7585]

(注意してください、これは何が起こっているかを説明するための明らかに異なるデータです)。配列値を文字列として扱うには、json_encode を適用する必要があります。数値を強制する反対のオプション JSON_NUMERIC_CHECK があることは知っています。同等のものは本当に存在しませんか?私の唯一の選択肢は、JavaScript 側で配列を再度処理することです。これは可能ですが、オブジェクトのカプセル化を多少壊します。

4

4 に答える 4

5

の反対があればいいのですが、あるJSON_NUMERIC_CHECKようには見えません。

データをエンコードする前に、PHP でデータが正しいタイプであることを確認できないのはなぜですか?

これは、手動で文字列にキャストする必要があることを意味する場合があります...

于 2013-10-30T15:50:15.597 に答える
5

配列でそれらを文字列として定義するか、他の場所から来ている場合は次のようにします。

$data = json_encode(array_map('strval', $data));
于 2013-10-30T15:54:14.253 に答える
1

json_decode()関数呼び出しでフラグを指定すると、大きな整数を文字列に変換できます。

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)
于 2013-10-30T16:06:22.180 に答える
0

には反対のフラグがないので、JSON_NUMERIC_CHECKそのための関数を作成しました。
1 次元および多次元の配列を受け入れ、配列の各要素を検証する条件を追加できます。

function JSON_NUMERIC_STRING($array){
    foreach($array as $key => &$value){
        if(is_array($value)){
            $value = iterateMA($value);
        }elseif(is_numeric($value)){
            $value = strval($value);
        }
        // add more conditions if needed...
    }
    return $array;
}

$array = JSON_NUMERIC_STRING($array);
于 2015-08-12T22:04:50.720 に答える