Le tableau PHP à deux dimensions ne peut pas être JSON

WBOY
Libérer: 2023-05-06 09:32:07
original
649 Les gens l'ont consulté

Dans le développement PHP, il est souvent nécessaire de convertir les données au format JSON pour la transmission ou le stockage. Cependant, parfois, lorsqu'un tableau bidimensionnel est converti en JSON via la fonction json_encode, des problèmes inattendus se produisent, par exemple, seules les données unidimensionnelles sont converties en JSON ou le format JSON est irrégulier. Dans cet article, nous examinerons les raisons pour lesquelles les tableaux bidimensionnels PHP ne peuvent pas être convertis en JSON et comment les résoudre.

  1. Pourquoi un tableau bidimensionnel PHP ne peut-il pas être converti en JSON ?

En PHP, la fonction json_encode ne peut accepter que des tableaux ou des objets unidimensionnels en entrée, sinon certains problèmes peuvent survenir lors de la conversion. En effet, le format JSON ne peut représenter que des structures de données simples, telles que des tableaux et des objets, mais ne peut pas représenter des types de données plus complexes, tels que des ressources, des fermetures, une récursivité infinie, etc.

Lorsque la fonction json_encode accepte un tableau de deux dimensions et plus en entrée, puisque le format JSON exige que toutes les données doivent être des tableaux ou des objets, et que ces tableaux ou objets peuvent contenir d'autres tableaux ou objets, cela entraîne une certaine complexité des structures de données. . Cela amène la fonction json_encode à convertir les structures de données avec trop de niveaux imbriqués en chaîne lors du traitement de ces données, et un format JSON irrégulier apparaîtra.

  1. Comment résoudre le problème selon lequel un tableau bidimensionnel ne peut pas être converti en JSON ?

Bien que la fonction json_encode ne puisse pas prendre directement en charge la conversion de tableaux bidimensionnels, nous pouvons atteindre cet objectif grâce à certaines techniques et méthodes. Voici quelques solutions de contournement :

(1) Utilisation d'objets dans des tableaux

Convertissez chaque sous-tableau d'un tableau multidimensionnel en objet. L'avantage est que json_encode peut identifier correctement l'objet et ainsi convertir correctement les données au format JSON.

Ce qui suit est un exemple pour convertir un tableau bidimensionnel en objet :

$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);
Copier après la connexion

Résultat de sortie :

{
    "John": {
        "age": 32,
        "gender": "male"
    },
    "Jane": {
        "age": 28,
        "gender": "female"
    }
}
Copier après la connexion

(2) Utilisez une fonction récursive profonde

Une autre méthode consiste à utiliser une fonction récursive profonde pour convertir un multi -dimensionnel en tableau de structure à un seul niveau et reconvertissez-le en tableau multidimensionnel avant de l'encoder en JSON. Voici un exemple de fonction :

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;
}
Copier après la connexion

On peut ensuite encoder le résultat au format JSON à l'aide du code suivant :

$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);
Copier après la connexion

Résultat en sortie :

[
    {
        "name": "John",
        "age": 32,
        "gender": "male",
        "hobbies_0": "music",
        "hobbies_1": "books"
    },
    {
        "name": "Jane",
        "age": 28,
        "gender": "female",
        "hobbies_0": "movies",
        "hobbies_1": "travel"
    }
]
Copier après la connexion
  1. Résumé

En PHP, la fonction json_encode ne peut accepter que des tableaux unidimensionnels ou Les objets sont pris en entrée, tandis que les tableaux multidimensionnels ne peuvent pas être directement convertis au format JSON. Cependant, nous pouvons utiliser certaines techniques et méthodes, telles que la conversion de sous-tableaux du tableau en objets, l'utilisation de fonctions récursives profondes, etc., pour convertir des tableaux multidimensionnels au format JSON. Dans les projets réels, nous pouvons choisir des méthodes appropriées pour résoudre les problèmes selon les besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal