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() メソッドは、配列が連想配列かどうかを判断するために使用されます。その場合、出力時に配列要素のキーと値の両方を出力する必要があります。値の型に関しては、さまざまなエンコード方法を採用しています。
さらに、関連する複数の要素のシリアル化をサポートするために、各子の末尾にカンマを出力する必要があります。最後に、配列の型に応じて対応する「終了記号」を出力し、フォーマットされた JSON 文字列を返します。
上記のコードを使用すると、以下に示すように、PHP 配列を JSON 文字列に変換できます。
$data = array( 'name' => '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 サイトの他の関連記事を参照してください。