2

文字列の値と数値の値を持つ多次元配列があります。配列を JSON オブジェクトに変換すると、次のような結果が得られます。

"A" : "1", "B" : "Text", "C" : "3"

目標は、次のような JSON を作成することです。

"A" : 1, "B" : "Text", "C" : 3

以前は、エンコード後に JSON を編集することでこれを実現していました。

$JSON = preg_replace('/"(-?\d+\.?\d*)"/', '$1', json_encode($array));

しかし、それはさまざまな理由で問題になっています。

そのため、代わりに、配列を で JSON に変換する前に、すべての値を調べて、値が数値の場合は、その値の型が からにjson_encode()変更されることを確認したいと思います。stringint

settype() コマンドを使用して、PHP で変数の型を設定できることはわかっています。

settype(int, $variable);

それを のようなコマンドと組み合わせる必要があると思いますがarray_walk()、数値のみに作用するテストを行うように組み合わせる方法がわかりません。

PHP で多次元配列を探索し、数値のみを含む値を見つけて、それらをint型に変換することは可能ですか?

4

2 に答える 2

2

json_encodeこれを行うことになっている PHP 5.3.3 以降のオプションがありますJSON_NUMERIC_CHECK

于 2013-01-06T11:56:42.097 に答える
2

JSON_NUMERIC_CHECK次のオプションを使用できます。

$array = array('A' => '1', 'B' => 'Text', 'C' => '3');
echo json_encode($array, JSON_NUMERIC_CHECK);

または、配列をループできます。

$array = array('A' => '1', 'B' => 'Text', 'C' => '3');
foreach ($array as & $value) {
    if (is_string($value) && ctype_digit($value)) {
        $value = (int) $value;
    }
}
echo json_encode($array);

編集:後世のために、値を持つ変数だけではなく、参照(配列項目の実際の内容を指す)に変わります&$value

于 2013-01-06T11:59:49.787 に答える