Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menulis kaedah untuk menukar tatasusunan kepada JSON dalam php

Bagaimana untuk menulis kaedah untuk menukar tatasusunan kepada JSON dalam php

PHPz
PHPzasal
2023-04-19 10:08:13496semak imbas

Dalam pengaturcaraan PHP, tatasusunan ialah struktur data yang penting. JSON juga merupakan format data yang popular dan digunakan secara meluas dalam pelbagai aplikasi web. Dalam PHP, kita selalunya perlu menukar tatasusunan kepada format JSON untuk penghantaran dan penyimpanan yang mudah. PHP menyediakan kaedah json_encode() untuk menukar tatasusunan kepada rentetan JSON. Walau bagaimanapun, kadangkala kita mungkin perlu menulis sendiri kaedah tatasusunan-ke-JSON untuk mengawal format dan logik output dengan lebih baik. Berikut ialah contoh pelaksanaan kaedah:

/**
 * 将数组转换成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;
}

Kaedah ini menerima tatasusunan sebagai parameter, serta parameter "lekukan" dan parameter "tahap semasa", kedua-dua parameter ini digunakan untuk memformat keluaran. Antaranya, kaedah is_assoc() digunakan untuk menentukan sama ada tatasusunan ialah tatasusunan bersekutu. Jika ya, kita perlu mengeluarkan kedua-dua kunci dan nilai elemen tatasusunan semasa mengeluarkan. Bagi jenis nilai, kami menggunakan kaedah pengekodan yang berbeza:

  • Jika ia adalah sub-tatasusunan, kaedah arrayToJson() dipanggil secara rekursif untuk pemprosesan selanjutnya.
  • Jika ia adalah jenis Boolean, tukarkannya kepada rentetan "true" atau "false" untuk output.
  • Jika ia batal, keluarkan "null" terus.
  • Jika ia adalah nombor, gunakan fungsi json_encode() untuk pengekodan dan output.
  • Jika jenis lain, gunakan juga fungsi json_encode(), tetapi hantar parameter pilihan JSON_UNESCAPED_UNICODE untuk mengekalkan kod Unicode asal bagi aksara bukan ASCII.

Selain itu, kita perlu mengeluarkan koma pada penghujung setiap kanak-kanak untuk menyokong penyirian berbilang elemen yang terlibat. Akhir sekali, kami mengeluarkan "simbol tamat" yang sepadan mengikut jenis tatasusunan dan mengembalikan rentetan JSON yang diformatkan.

Menggunakan kod di atas, kita boleh menukar tatasusunan PHP kepada rentetan JSON seperti berikut:

$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);

Output yang terhasil adalah seperti berikut:

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

Dalam sebenar Semasa pembangunan, kita mungkin perlu mengeluarkan rentetan JSON mengikut keperluan format tertentu. Pada ketika ini, tatasusunan tersuai kepada kaedah JSON menjadi sangat berharga.

Atas ialah kandungan terperinci Bagaimana untuk menulis kaedah untuk menukar tatasusunan kepada JSON dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn