J'ai du mal à mettre cette question à mettre cette question aux mots si mal simplement simplement à utiliser un exemple simple, espérons que le titre a obtenu mon problème à travers.
Je crée un site de blog sur lequel je peux créer des blogposts et que les gens peuvent poster commentaires. Tout cela est enregistré dans JSON, à l'exception des détails de connexion enregistrés dans MySQL. P>
Sauver les blogposts vont bien, mais j'essaie maintenant de sauvegarder des commentaires. P>
Dites le blogpost La matrice ressemble à ceci: p> Quelqu'un écrit maintenant un commentaire sur "Second Blogpost", je l'enregistre dans un tableau comme celui-ci (utilisateur tiré de MySQL): P> MAINTENANT, je veux les fusionner comme ceci: P> Array
(
[0] => Array
(
[id] => 0
[title] => first blogpost
[content] => blogpost text
)
[1] => Array
(
[id] => 1
[title] => second blogpost
[content] => blogpost 2 text
[comments] => Array
(
[user] => myusername
[comment] => first post was better!
)
)
)
3 Réponses :
Si vous aviez une clé associée entre les messages et les commentaires (comme la présentation de post_id dans le tableau de commentaires), cela aurait plus de sens de la fusionner / les mettre.
Je suppose que c'est votre blogpost P>
foreach($comments as $comment){
$posts[$comment['post_id']]['comments'][] = $comment;
}
Lorsque le blogpost est mis à jour, je suppose que vous pouvez obtenir l'identifiant de ce blogpost.
Vous pouvez ensuite vérifier si votre structure de données a déjà une clé "Commentaires". Si ce n'est pas le cas, ajoutez la clé et créez une matrice contenant le commentaire et l'utilisateur comme premier tableau. P>
S'il existe déjà, ajoutez un nouveau tableau avec l'utilisateur et le commentaire afin qu'il puisse y avoir Plusieurs commentaires pour chaque blogpost. p>
par exemple en utilisant Array_map < / a>: p> Démo PHP P > p>
Y a-t-il une différence dans la création d'un tableau comme '$ blogpostss = tableau ();' vs '$ blogpostss = [];'? Parce que j'ai utilisé le premier dans mon code.
@kevinfromspace Vous pouvez simplement utiliser le premier si vous voulez. Celui que j'ai utilisé est un raccourci et je pense que c'est a été introduit en php 5.4
Alors je l'ai réparé après un peu de pensée
Ceci est la structure finale: p> J'ai ajouté un horodatage à cause d'une suggestion ici. C'est aussi une version simplifiée de ce que j'utilise réellement, j'ai essayé d'ajouter de nombreux autres commentaires et de plusieurs postes qui fonctionnent tous deux. P> Ceci est le code, je devrais mentionner que l'ID est dans l'URL et il est enregistré comme épargné JSON: p> assez simple jusqu'à présent jusqu'à présent, voici la manière dont la matrice est créée: p> [$ id] enregistre C'est au bon post, ["Commentaires"] l'enregistre à la touche Commentaires (ou la crée) et le dernier [] donne chaque commentaire un index différent à l'intérieur des ["Commentaires"]. P> $newJSON = json_encode($currentArray, JSON_PRETTY_PRINT);
file_put_contents($filename, $newJSON);
Chaque élément est en matrice avec sa clé. Votre commentaire (tableau) n'a aucune clé. Où devrait-il être placé?
Quelque chose comme: $ arr [1] ['commentaires'] = $ newarr;
Vous ne pouvez pas avoir ce tableau "flottant" à ce stade comme celui-là, vous devez utiliser une clé pour la stocker sous, identique à celle des autres valeurs id / titre / contenu. Pourrait par exemple être nommé
commentaires code> ...Cela se sent un peu fragile, si la structure JSON ou Array est votre un véritable magasin, puis tout commentaire a éclaté sur l'un de vos postes de blog met toutes les données à risque. De plus cela pourrait grandir! Pourquoi ne pas utiliser la base de données?
J'ajouterais un horodatage à chaque commentaire, utile pour le tri.