ホームページ >バックエンド開発 >PHPの問題 >PHP の 2 次元配列を json にすることはできません

PHP の 2 次元配列を json にすることはできません

WBOY
WBOYオリジナル
2023-05-06 09:32:07675ブラウズ

PHP 開発では、送信または保存のためにデータを JSON 形式に変換する必要があることがよくあります。しかし、json_encode関数で2次元配列をJSONに変換すると、1次元のデータしかJSONに変換されなかったり、JSONの形式がおかしくなったりするなど、予期せぬ問題が発生することがあります。この記事では、PHPの2次元配列をJSONに変換できない原因とその解決方法について掘り下げていきます。

  1. PHP の 2 次元配列を JSON に変換できないのはなぜですか?

PHP では、 json_encode 関数は入力として 1 次元配列またはオブジェクトのみを受け入れることができます。そうでない場合、変換中に問題が発生する可能性があります。これは、JSON 形式は配列やオブジェクトなどの単純なデータ構造のみを表現でき、リソース、クロージャー、無限再帰などのより複雑なデータ型を表現できないためです。

json_encode 関数が入力として 2 次元以上の配列を受け入れる場合、JSON 形式ではすべてのデータが配列またはオブジェクトである必要があり、これらの配列またはオブジェクトには他の配列またはオブジェクトが含まれる可能性があるため、この結果は次のようになります。データ構造の複雑さをいくらか取り除きます。これにより、json_encode 関数は、これらのデータを処理するときに、ネストされたレベルが多すぎるデータ構造を文字列に変換し、不規則な JSON 形式が表示されます。

  1. 2次元配列がJSONに変換できない問題を解決するにはどうすればよいですか?

json_encode 関数は 2 次元配列の変換を直接サポートすることはできませんが、いくつかの技術と方法を通じてこの目標を達成できます。解決策は次のとおりです。

(1) 配列内のオブジェクトを使用する

多次元配列内の各部分配列をオブジェクトに変換します。この利点は、json_encode がオブジェクトを正しく識別できるため、データを JSON 形式に正しく変換できることです。

2次元配列をオブジェクトに変換する例:

$multiArray = array(
    "John"  => array("age"=>32, "gender"=>"male"), 
    "Jane"  => array("age"=>28, "gender"=>"female")
);
 
$multiObject = new \stdClass();
foreach ($multiArray as $key => $val) {
    $multiObject->$key = (object)$val;
}
 
echo json_encode($multiObject);

出力結果:

{
    "John": {
        "age": 32,
        "gender": "male"
    },
    "Jane": {
        "age": 28,
        "gender": "female"
    }
}

(2) 深層再帰関数の使用

もう 1 つのアプローチは、多次元配列を単層構造化配列に変換し、それを JSON にエンコードする前に多次元配列に戻す高度な再帰関数を使用することです。関数の例を次に示します:

function flattenArray($arrayName) {
    $out = array();
    foreach ($arrayName as $key => $subArray) {
        if (is_array($subArray)) {
            $out = array_merge($out, flattenArray($subArray, $key.'_'));
        } else {
            $out[$key] = $subArray;
        }
     }
     return $out;
}

次に、次のコードを使用して結果を JSON 形式にエンコードできます:

$data = array(
    array(
        "name" => "John",
        "age" => 32,
        "gender" => "male",
        "hobbies" => array("music", "books"),
    ),
    array(
        "name" => "Jane",
        "age" => 28,
        "gender" => "female",
        "hobbies" => array("movies", "travel"),
    ),
);
 
$flatData = array_map('flattenArray', $data);
 
echo json_encode($flatData);

出力結果:

[
    {
        "name": "John",
        "age": 32,
        "gender": "male",
        "hobbies_0": "music",
        "hobbies_1": "books"
    },
    {
        "name": "Jane",
        "age": 28,
        "gender": "female",
        "hobbies_0": "movies",
        "hobbies_1": "travel"
    }
]
  1. summary

PHP では、 json_encode 関数は入力として 1 次元配列またはオブジェクトのみを受け入れることができ、多次元配列を JSON 形式に直接変換することはできません。ただし、配列内のサブ配列をオブジェクトに変換したり、深い再帰関数を使用したりするなど、いくつかの技術や方法を使用して、多次元配列を JSON 形式に変換することができます。実際のプロジェクトでは、必要に応じて適切な方法を選択して問題を解決できます。

以上がPHP の 2 次元配列を json にすることはできませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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