J'essaie de prendre une matrice de matrice en PHP et de le convertir en une matrice JavaScript avec une nouvelle mise en forme de texte au format JSON. Quelle est la meilleure pratique pour faire des modifications de formatage lors de la conversion de la matrice en JSON?
J'ai essayé d'utiliser JSON_ENCODE lorsque j'ai apporté une matrimonie à JavaScript ... mais cela semble créer un tableau JS qui est une chaîne de manière générale. une erreur. Je peux obtenir la fonction .MAP pour fonctionner sur une seule variable contenant un code dur de mon tableau. Je ne peux pas obtenir .map pour rendre le format change lorsque je viens de convertir mon tableau PHP en une matrice JSON. J'ai également essayé de faire le format changer un résultat à la fois tel qu'il apparaît dans la requête MySQL, et rien que j'essaye ne fonctionne. Je suis très nouveau à JS, alors en difficulté avec les détails de la conversion du tableau et de reformatation JSON combinée. P> La sortie du tableau PHP ressemble à ceci: p> xxx pré> mais j'en ai besoin pour être un tableau JS au format JSON avec des modifications texte telles que ceci: p> Voici le code utilisé pour générer Le tableau PHP: P> $sql = "SELECT `poly_data` FROM `landowner_polygon` WHERE `landowner_location_id`=".$llocID;
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>poly_data</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['poly_data'] . "</td>";
$llocFence = $row['poly_data'];
$allFences = $allFences.$llocFence;
$fences[] = $llocFence;
echo "</tr>";
}
echo "</table>";
// Free result set
mysqli_free_result($result);
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
}
5 Réponses :
C'est ce que j'utilise:
function jsonObjToArray(jsonObj) { var result = []; var keys = Object.keys(jsonObj); keys.forEach(function (key) { result.push(jsonObj[key]); }); return result; }
Utilisez .map code> pour planer sur la matrice et utilisez . Appartement () fonction pour aplatir la matrice.
const jfences = [[[56.51845972498524,-6.182719791640125],[56.52412387806186,-6.18409308265575],[56.523103365873006,-6.1784282572162965]],[[58.472119674062085,-8.168053780198875],[58.47303462652167,-8.161809597612205],[58.46960999252895,-8.160264645219627]]]
const fencesArrObj = jfences.map((item) => {
return item.map(geo => {
return {
lat: geo[0],
log: geo[1]
}
})
})
const geoFence = [].concat.apply([], fencesArrObj);
console.log(geoFence)
Essayez le snippet suivant
p>
var a = [ [ [56.51845972498524, -6.182719791640125], [56.52412387806186, -6.18409308265575], [56.523103365873006, -6.1784282572162965] ], [ [58.472119674062085, -8.168053780198875], [58.47303462652167, -8.161809597612205], [58.46960999252895, -8.160264645219627] ] ] a = a.map(b => { return b.map((c, i) => { return { lat: c[0], lng: c[1] } }) }) console.log(a)
Thnk vous pour le faire ... Il semble de retourner un tableau unique avec six objets plutôt que d'un tableau avec deux. Je pense avoir besoin d'un tableau avec des clés? Plutôt qu'un tableau avec 6 objets tenant la last Longs à partir de deux séries. (Créez un sens?) Voici ce que la sortie ressemble à: (6) [...] 0: objet {lat: 56.51845972498524, LNG: -6.182719791640125} 1: objet {LAT: 56.52412387806186, LNG: -6.18409308265575} 2: Objet {LAT: 56.523103365873006, LNG: -6.1784282572162965} 3: Objet {LAT: 58.472119674062085, LNG: -8.168053780198875} 4: L'objet .... etc Longueur: 6
Cela se rapproche ... Puis-je demander, comment puis-je obtenir d'un tableau avec des objets dedans, à quelque chose comme ceci: 0: (3) [...] 0: objet {lat: 56.51845972498524, GNL: -6.1827197916401845} 1: objet {LAT: 56.52412387806186, LNG: -6.18409308265575} var geofence = [{LAT: 53.5233414878423414878423416, LNG: -6.193736158410616}, {LAT: 53.535126839526605, LNG: -6.175282560388155}, etc ...] serait-ce une boucle Pour supprimer l'objet? Ou y a-t-il une commande qui convertit les objets dans la zone? C'est aussi proche que j'ai eu.
Pouvez-vous s'il vous plaît poster qu'est-ce que vous obtenez et que voulez-vous exactement?
Shridhar, comment puis-je faire ça? Je suis nouveau ici et je ne veux pas obtenir le protocole faux. Est-ce que je poste cela dans la section ci-dessus? Ou ici? C'est un groupe génial et je veux juste apprendre la bonne façon d'interagir.
Voici le code modifié qu'il retournera la sortie selon votre exigence.
var myFences = []; var jfences = <?php echo json_encode($fences)?>;// puts php array into json formatting into js. jfences.forEach(array => { array.map(e => { myFences.splice(myFences.length, 0, ({lat: e[0], lng: e[1]})); }); }); console.log(myFences); // Output of myFences var [ {"lat": 56.51845972498524,"lng": -6.182719791640125}, {"lat": 56.52412387806186,"lng": -6.18409308265575}, {"lat": 56.523103365873006,"lng": -6.1784282572162965}, {"lat": 58.472119674062085,"lng": -8.168053780198875}, {"lat": 58.47303462652167,"lng": -8.161809597612205}, {"lat": 58.46960999252895,"lng": -8.160264645219627} ]
Merci ... je vais essayer cela.
Cela se ferme, mais je reçois une erreur de console 'TypeError: Array.Map n'est pas une fonction'. Si je sortie Jfence directement à la console avant la boucle de Foreach ... il a l'air correct. Comme ceci: 0: "[[53.51845972498524, -6.182719791640125], [53.52412387806186, -6.18409308265575]]" 1: "[[52.472119674062085, -8.168053780198875]]. Cette erreur est ce que je continue à frapper, et c'est comme si le tableau ne fonctionne pas . Quelqu'un a suggéré que cela pourrait être une chaîne ...
Si le var jfences = Php echo json_encode ($ clôtures)?> Code> Renvoie une matrice JSON valide, le code ci-dessus fonctionne bien, j'ai créé ce code pour un tableau PHP valide qui vous est mentionné dans Votre question, vous devez simplement remplacer ce code JavaScript, cela fonctionne bien. Ou envoyez-moi la capture d'écran du code JavaScript après la charge de la page.
Merci ... oui le problème pour moi est mon étape json_encode ne renvoie pas une matrice JSON valide ... Quand je fais un imprimeur sur le tableau PHP juste avant la conversion, cela ressemble à ceci: (Semble ok ... mais Je sais qu'il y a quelque chose de mal). Array ([0] => [[53,51845972498524, -6,182719791640125], [53,52412387806186, -6,18409308265575]] [1] => [[52,472119674062085, -8,168053780198875], [52,47303462652167, -8,161809597612205])
Merci tout le monde pour votre contribution ... Il s'avère que mon tableau sort de PHP n'était pas un tableau, mais une chaîne qui ressemblait à un tableau ... J'aimerais prendre un crédit pour cette solution, mais j'étais Formé par un architecte génial que je connais et il m'a donné une seule ligne pour résoudre ce problème. Tout le code que vous avez fourni travaillé, à l'exception de mon tableau d'origine a été cassé, il ne s'agissait pas d'une solution complète. Voici la réponse.
var myFences = Array.from(<?php echo json_encode($fences)?>).map(e => eval(e).map(p => ({lat:p[0],lng:p[1]}))); console.log(myFences)
Pourquoi ne pas créer de critère PHP qui renvoie le tableau dans JSON et le demande avec Ajax?
Qu'est-ce que le tableau code> myfences code> a l'air après l'avoir modifié avec
mapper code>? On dirait que le code irait bien.
Montrez-nous comment vous faites
$ Clôtures code> c'est où vous devez apporter des modifications. Résoudre le problème, ne pas le défoncer
Je ne connais pas Ajax, mais fera des recherches sur la façon dont je pourrais le faire. Les myfences ne modifieront pas avec une maquette comme une matrice parce que je pense que c'est une chaîne ... Je pense que c'est mes problèmes car la matrice PHP arrive comme une chaîne (je pouvais me tromper là). Voici la boucle MySQL qui construit la matrice MyFences.
Je me demande si c'est la façon dont je crée des monnées dans PHP qui causent mon problème ... J'ai ajouté le code ci-dessus.
Je reçois des suggestions ci-dessous qui sont géniales et elles sont toutes proches .. mais je pense que je crée mal le tableau PHP d'origine incorrectement dans la section MySQL, car lorsque je prends vos solutions qui génèrent le JSON reformaté et je le remplace par mon tableau ... Je reçois une erreur dans la console: 'TypeError: item.map n'est pas une fonction'. Ive regarda autour de lui et ne peut pas voir une explication évidente pour ce qui cause cela. Merci à tous pour vous entrez jusqu'à présent.