q1proust77
Messages postés21Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention28 août 2008
-
27 août 2008 à 12:33
q1proust77
Messages postés21Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention28 août 2008
-
28 août 2008 à 18:50
Bonjour,
Je cherche a transférer un tableau multi-dimensionnel provenant d'une base de donnée SQL, j'ai donc créer un script PHP qui envoi les données a flash(via sendAndLoad).
Le tableau est stocké dans un champs Text dans la BDD sous la forme '[[valeur1,valeur2],[valeur3,valeur4],[valeur5,valeur6]...]'.
Le script envoi correctement les donnée a flash mais flash recois le tableau comme une chaine de caractere.
Je voulais donc savoir s'il existait une fonction pour transformer un string sous cette forme en tableau ou si je dois en créer une a base de split().
Sinon avez vous des conseil sur le meilleur moyen d'envoyer un tableau à flash via php ?
Voila ce que ca donne actuellement
Une map est définie par défaut directement dans le code donc aucun probleme;
Mais ensuite le code va charger la carte sur le script :
PhpObject.onLoad = function(success) {
trace(Cmap_data.length);//renvoie 33 (bonne valeur)
Cmap_data = this.Cmapdata;
trace(Cmap_data.length);//renvoie 1601 (taille totale du string envoyé)
}
q1proust77
Messages postés21Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention28 août 2008 28 août 2008 à 18:50
Voila la fonction que j'ai développer pour le moment, il y a surement plus léger et plus dynamique mais ça marche dans le cas dont j'en ai besoin .
Elle convertir donc une chaine du type suivant en tableau :
string = '[6,5,02],[4,3,20],[2,1,13]'; (sans les crochets externe donc)
3 petits inconvénients :
-Elle ne gère que les tableaux de chiffres ou de strings d'une meme taille
-Elle ne gère que les tableaux sous cette forme (donc X tableau imbriqué en 1);
-Les 'sous-tableaux' doivent avoir la même structure (dans l'exemple les nombre sont constitué de 1, 1 puis 2 chiffres d'où le 02 dans le 1er tableau);
Les chaines suivantes peuvent etre donc convertie :
Par contre celle ci ne pourra pas l'être :
'[6,54,02],[40,3,20],[2,1,13]' (La structure des sous tableau est différente)
=>'[06,54,02],[40,03,20],[2,1,13]'(Il faut donc rajouter des 0 pour que ça marche)
Voici la fonction :
function StrToArray(str:String):Array
{
var arr:Array;
taille = str.split('[').length - 1;
sous_taille = (str.length - (taille-1)) / taille;
var sous_chaine:Array = Array(taille - 1);
i = 0;
while (i <= taille)
{
if (str.substr((i * sous_taille + i), sous_taille) != "")
{
sous_chaine[i] = str.substr((i * sous_taille + i + 1), sous_taille - 2);
}
i++;
}
i = 0;
var sous_chaine_mod:Array = Array(sous_chaine.length);
while (i < sous_chaine.length)
{
temp_str = sous_chaine[i];
sous_chaine_mod[i] = temp_str.split(',');
i++;
}
arr = sous_chaine_mod;
return arr;
}
Si vous avez des idées d'optimisation je suis preneur