ホームページ  >  記事  >  バックエンド開発  >  PHPで配列をJSONに変換するメソッドを記述する方法

PHPで配列をJSONに変換するメソッドを記述する方法

PHPz
PHPzオリジナル
2023-04-19 10:08:13428ブラウズ

PHP プログラミングでは、配列は重要なデータ構造です。 JSON も人気のあるデータ形式であり、さまざまな Web アプリケーションで広く使用されています。 PHP では、送信や保存を容易にするために、配列を JSON 形式に変換する必要があることがよくあります。 PHP には、配列を JSON 文字列に変換するための json_encode() メソッドが用意されています。ただし、出力形式とロジックをより適切に制御するために、配列から JSON へのメソッドを自分で記述する必要がある場合があります。以下はメソッドの実装例です。

/**
 * 将数组转换成JSON字符串
 * @param array $data 待转换的数组
 * @param int $indent 缩进量
 * @param int $level 当前层级
 * @return string 转换后的JSON字符串
 */
function arrayToJson($data, $indent = 0, $level = 0)
{
    $result = "";
    $space = str_repeat(" ", $indent);
    $isAssoc = is_assoc($data);

    if ($isAssoc) {
        $result .= "{\n";
    } else {
        $result .= "[\n";
    }

    foreach ($data as $key => $value) {
        if ($isAssoc) {
            $result .= $space . json_encode($key) . ": ";
        }

        if (is_array($value)) {
            $result .= arrayToJson($value, $indent + 4, $level + 1);
        } else if (is_bool($value)) {
            $result .= json_encode($value ? "true" : "false");
        } else if (is_null($value)) {
            $result .= "null";
        } else if (is_numeric($value)) {
            $result .= json_encode($value);
        } else {
            $result .= json_encode($value, JSON_UNESCAPED_UNICODE);
        }

        if (next($data)) {
            $result .= ",";
        }

        $result .= "\n";
    }

    $result .= str_repeat(" ", $level * 4);

    if ($isAssoc) {
        $result .= "}";
    } else {
        $result .= "]";
    }

    return $result;
}

/**
 * 判断一个数组是否是关联数组
 * @param array $data 待判断的数组
 * @return bool
 */
function is_assoc($data)
{
    if (!is_array($data)) {
        return false;
    }

    $keys = array_keys($data);
    $len = count($keys);

    for ($i = 0; $i < $len; $i++) {
        if ($keys[$i] !== $i) {
            return true;
        }
    }

    return false;
}

このメソッドは、「インデント」パラメータと「現在のレベル」パラメータに加えて、配列をパラメータとして受け入れます。これら 2 つのパラメータは、出力の書式設定に使用されます。このうち、is_assoc() メソッドは、配列が連想配列かどうかを判断するために使用されます。その場合、出力時に配列要素のキーと値の両方を出力する必要があります。値の型に関しては、さまざまなエンコード方法を採用しています。

  • それが部分配列の場合、さらなる処理のために arrayToJson() メソッドが再帰的に呼び出されます。
  • ブール型の場合は、文字列「true」または「false」に変換して出力します。
  • nullの場合は直接「null」を出力します。
  • 数値の場合は、json_encode() 関数を使用してエンコードして出力します。
  • 他のタイプの場合は、 json_encode() 関数も使用しますが、非 ASCII 文字の元の Unicode コードを保持するには、JSON_UNESCAPED_UNICODE オプション パラメータを渡します。

さらに、関連する複数の要素のシリアル化をサポートするために、各子の末尾にカンマを出力する必要があります。最後に、配列の型に応じて対応する「終了記号」を出力し、フォーマットされた JSON 文字列を返します。

上記のコードを使用すると、以下に示すように、PHP 配列を JSON 文字列に変換できます。

$data = array(
    &#39;name&#39; => 'John',
    'age' => 28,
    'married' => true,
    'hobbies' => array('basketball', 'music', 'reading'),
    'address' => array(
        'city' => 'Beijing',
        'country' => 'China'
    ),
    'friends' => array(
        array('name' => 'Tom', 'age' => 27),
        array('name' => 'Jane', 'age' => 26)
    )
);

echo arrayToJson($data);

結果の出力は次のとおりです。

{
    "name": "John",
    "age": 28,
    "married": true,
    "hobbies": [
        "basketball",
        "music",
        "reading"
    ],
    "address": {
        "city": "Beijing",
        "country": "China"
    },
    "friends": [
        {
            "name": "Tom",
            "age": 27
        },
        {
            "name": "Jane",
            "age": 26
        }
    ]
}

実際の開発では特定の形式要件に従って JSON 文字列を出力する必要がある場合があります。この時点で、カスタム配列を JSON に変換するメソッドは非常に価値があります。

以上がPHPで配列をJSONに変換するメソッドを記述する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。