phpのjson_encode配列を変換せずに実現する方法

PHPz
リリース: 2023-04-21 09:54:54
オリジナル
679 人が閲覧しました

PHP の json_encode 関数は、PHP 変数を JSON 形式の文字列に変換します。最も一般的なのは、PHP の配列を JSON 形式の文字列に変換することです。ただし、場合によっては、 json_encode 関数で配列を変換しないことが必要な場合があります。この記事では、この目標を達成する方法を検討します。

まず、json_encode 関数がデフォルトでどのように配列を変換するかを見てみましょう。次の PHP 配列があるとします。

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => array("reading", "swimming", "traveling")
);
ログイン後にコピー

この配列を json_encode 関数に渡すと、関数は次の JSON 形式の文字列を返します。

{
    "name": "John",
    "age": 30,
    "hobbies": ["reading", "swimming", "traveling"]
}
ログイン後にコピー

ご覧のとおり、この関数は次のようになります。 「hobby」キー値は、PHP サブ配列から JSON 配列に変換されます。これは、PHP データをレイヤーごとに JSON 形式に再帰的に変換する方法を提供するため、ほとんどの場合に役立ちます。

ただし、場合によっては、 json_encode 関数で配列を変換せずに、元の PHP 配列として保持したい場合があります。これを実現する方法は、配列内で特別なプレースホルダーを使用することです。

配列内の各サブ配列をプレースホルダーに置き換えてから、json_encode 関数のコールバック関数を使用して、これらのプレースホルダーを通常のサブ配列に置き換えることができます。以下に例を示します。

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => "[[subarray]]"
);

function replaceSubarrays($data) {
    if(is_array($data)) {
        if(in_array("[[subarray]]", $data)) {
            $data = array_map("replaceSubarrays", $data);
        }
    } elseif ($data == "[[subarray]]") {
        $data = array();
    }
    return $data;
}

$json = json_encode(array_map("replaceSubarrays", $array));

echo $json;
ログイン後にコピー

この例では、「hobbies」キーの値を「[[subarray]]」に置き換えます。これは、値が subarray であることを示す特別なプレースホルダーです。また、このプレースホルダーを処理するコールバック関数 replaceSubarrays も定義します。すべての配列要素を再帰的に反復し、プレースホルダーを含むすべてのサブ配列を見つけて、それらを空の配列に置き換えます。次に、 json_encode 関数と array_map 関数を使用して、配列全体をコールバック関数に渡し、サブ配列を置き換えます。

この例を実行すると、次の文字列が JSON 形式で取得されます:

{
    "name": "John",
    "age": 30,
    "hobbies": "[[subarray]]"
}
ログイン後にコピー

予想どおり、「hobbies」キーの値は JSON 配列に変換されませんが、 「[[subarray]]」文字列として予約されています。

プレースホルダーを使用するこのアプローチには追加の作業が必要ですが、これにより json_encode 関数が元の PHP 配列を保持できるため、より高いレベルの方法でデータを処理できるようになります。

以上がphpのjson_encode配列を変換せずに実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート