超単純PHPはJSONデータを返す

1958 ワード

多くの場合、Json形式の結果を返すプログラムが必要です.例えば、
{
"UserKeyGetResponse":
{"RequestName":"e99e6d63e8c712d7699f52978a","api_key_value":"41954dd9b1cb6a95802eab6810"},
"error_response":
{"code":"NO_ERROR","msg":"システムパラメータ取得成功"}
}
結果は、次のような配列形式で作成できます.
$respon = array('UserKeyGetResponse' => array('RequestName' => $api_request_name, 'api_key_value' => $api_key_value),
'error_response'=>array('code'=>'NO_ERROR','msg'=>'システムパラメータ取得成功');
最後の$respon=json_encode($respon);出力結果はJson形式で、中国語が正常に表示されないなどの符号化問題に直面する可能性があります.ネット上で解決方法を見つけました.具体的には以下のように実現されています.
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
function JSON($array) {
 arrayRecursive($array, 'urlencode', true);
 $json = json_encode($array);
 return urldecode($json);
}

eg: $error_respon=array('code'=>'ERROR_MSG_MISS','msg'=>'メッセージは存在しません');
echo JSON($array);
結果:
{"code":"ERROR_MSG_MISS","msg":"メッセージが存在しない"}
クライアントはこの結果を解析することができます.もちろん、エラーコードは数字で置き換えられます.