bonjour à tous,

voilà je suis toujours sur mon projet de carte qui touche au but,

j'utilise un tableau multidimensionnel qui est remplis via une bd.

Message à MrGuillou, j'optimiserai aprés promis, j'ai pris note

$sql="SELECT a.*, c.imagelink,c.name as aircraftname,p.code, p.pilotid as pilotid, p.firstname, p.lastname,dep.name as depname, dep.lat AS deplat, dep.lng AS deplng,arr.name as arrname, arr.lat AS arrlat, arr.lng AS arrlng
                FROM tracker_cil_acarsdata a
                LEFT JOIN tracker_cil_aircraft c ON a.`aircraft`= c.`registration`
                LEFT JOIN tracker_cil_pilots p ON a.`pilotid`= p.`pilotid`
                LEFT JOIN tracker_mega_airports AS dep ON dep.icao = a.depicao
                LEFT JOIN tracker_mega_airports AS arr ON arr.icao = a.arricao ";
            $req = $DBPDO ->query($sql);

            while($flight=$req->fetch(PDO::FETCH_OBJ)) 
                {

                    $data]=$flight;

                }

et la page le retourne

{"id":"55","pilotid":"1","flightnum":"test2","pilotname":"FFS2 FL-76","aircraft":"A380-1","lat":"38.629236929042","lng":"34.129814862993","heading":"280","alt":"25000","gs":"433","depicao":"LFRJ","depapt":"LANDIVISIAU","arricao":"ENDI","arrapt":"DAGALI","deptime":"07:10:00","timeremaining":"3:45","arrtime":"13:37:35","route":"","route_details":"","distremain":"1626","phasedetail":"Croisi\u00e8re","online":"","messagelog":"","lastupdate":"2014-02-04 13:37:35","client":"kACARS","imagelink":"http:\/\/cordis.europa.eu\/news\/images\/20060905_3.jpg","aircraftname":"A380","code":"FFS","firstname":"FFS2","lastname":"FL-76","depname":"LANDIVISIAU","deplat":"48.5303","deplng":"-4.1516","arrname":"DAGALI","arrlat":"60.4167","arrlng":"8.5128"},]

tout bon jusque là, mais voilà je souhaiterai inséré

"mod":"cil"

j'ai essayé

$data]"mod"]="cil";

$data"mod"]="cil";

mais cela ne tombe pas ou il faut et plante mon json car au lieux d'avoir (voir à la fin de la ligne)

{"id":"55","pilotid":"1","flightnum":"test2","pilotname":"FFS2 FL-76","aircraft":"A380-1","lat":"38.629236929042","lng":"34.129814862993","heading":"280","alt":"25000","gs":"433","depicao":"LFRJ","depapt":"LANDIVISIAU","arricao":"ENDI","arrapt":"DAGALI","deptime":"07:10:00","timeremaining":"3:45","arrtime":"13:37:35","route":"","route_details":"","distremain":"1626","phasedetail":"Croisi\u00e8re","online":"","messagelog":"","lastupdate":"2014-02-04 13:37:35","client":"kACARS","imagelink":"http:\/\/cordis.europa.eu\/news\/images\/20060905_3.jpg","aircraftname":"A380","code":"FFS","firstname":"FFS2","lastname":"FL-76","depname":"LANDIVISIAU","deplat":"48.5303","deplng":"-4.1516","arrname":"DAGALI","arrlat":"60.4167","arrlng":"8.5128","mod":"cil"]

j'ai

{"id":"55","pilotid":"1","flightnum":"test2","pilotname":"FFS2 FL-76","aircraft":"A380-1","lat":"38.629236929042","lng":"34.129814862993","heading":"280","alt":"25000","gs":"433","depicao":"LFRJ","depapt":"LANDIVISIAU","arricao":"ENDI","arrapt":"DAGALI","deptime":"07:10:00","timeremaining":"3:45","arrtime":"13:37:35","route":"","route_details":"","distremain":"1626","phasedetail":"Croisi\u00e8re","online":"","messagelog":"","lastupdate":"2014-02-04 13:37:35","client":"kACARS","imagelink":"http:\/\/cordis.europa.eu\/news\/images\/20060905_3.jpg","aircraftname":"A380","code":"FFS","firstname":"FFS2","lastname":"FL-76","depname":"LANDIVISIAU","deplat":"48.5303","deplng":"-4.1516","arrname":"DAGALI","arrlat":"60.4167","arrlng":"8.5128"},}{"mod":"cil"]}

comment puis je m'en sortir

merci d'avance de votre aide

Flo

5 réponses


MrGuillou
Réponse acceptée

En effet c'est aussi une solution :)
En plus c'est un objet donc c'était plutot

$data[0]->mod
    $data$key]->mod
$data] = array('mod' => 'cil');

?

Enfin normalement

$data'mod'] = 'cil';

Devrait marcher

Bonsoir,

$data[0]'mod'] = 'cil';

explication, ton tableau à contient une première entrée qui est un tableau associatif;

du coup tu cible la première entrée avec $data[0] puis la clé dans le tableau associatif 'mod'];

du coup normalement tu as ?

{"id":"55","pilotid":"1","flightnum":"test2","pilotname":"FFS2 FL-76","aircraft":"A380-1","lat":"38.629236929042","lng":"34.129814862993","heading":"280","alt":"25000","gs":"433","depicao":"LFRJ","depapt":"LANDIVISIAU","arricao":"ENDI","arrapt":"DAGALI","deptime":"07:10:00","timeremaining":"3:45","arrtime":"13:37:35","route":"","route_details":"","distremain":"1626","phasedetail":"Croisi\u00e8re","online":"","messagelog":"","lastupdate":"2014-02-04 13:37:35","client":"kACARS","imagelink":"http:\/\/cordis.europa.eu\/news\/images\/20060905_3.jpg","aircraftname":"A380","code":"FFS","firstname":"FFS2","lastname":"FL-76","depname":"LANDIVISIAU","deplat":"48.5303","deplng":"-4.1516","arrname":"DAGALI","arrlat":"60.4167","arrlng":"8.5128","mod":"cil"}]

Par contre du coup si ta requete te retourne plusieurs résultats

Alors il faudra modifier toutes les lignes

//après ton while
foreach($data as $key => $val)
{
    $data$key]'mod'] = 'cil';
}

Du coté optimisation, il vaut mieux faire la même chose avec une boucle for, mais la de suite je suis fainéant.

Sinon si mod vaut toujours cil

Alors tu peux directement l'indiquer dans la requete

$sql="SELECT a.*, c.imagelink,c.name as aircraftname,p.code, p.pilotid as pilotid, p.firstname, p.lastname,dep.name as depname, dep.lat AS deplat, dep.lng AS deplng,arr.name as arrname, arr.lat AS arrlat, arr.lng AS arrlng, 'cil' as mod
                FROM tracker_cil_acarsdata a .......................

voila voila,

flo3376
Auteur

j'avais essayer mais php me disait gentiment non.

Après avoir chercher des infos, je suis arrivé à la conclusion que je devais modifié le résultat de la bd avant de l'envoyé dans $data.

Mais $flight n'est pas un array mais un std class, ou class standart, donc j'ai ramé un peu avant de comprendre comme injecté une nouvelle donnée dedans mais j'ai trouvé.

$sql="SELECT a.*, c.imagelink,c.name as aircraftname,p.code, p.pilotid as pilotid, p.firstname, p.lastname,dep.name as depname, dep.lat AS deplat, dep.lng AS deplng,arr.name as arrname, arr.lat AS arrlat, arr.lng AS arrlng
                FROM tracker_cil_acarsdata a
                LEFT JOIN tracker_cil_aircraft c ON a.`aircraft`= c.`registration`
                LEFT JOIN tracker_cil_pilots p ON a.`pilotid`= p.`pilotid`
                LEFT JOIN tracker_mega_airports AS dep ON dep.icao = a.depicao
                LEFT JOIN tracker_mega_airports AS arr ON arr.icao = a.arricao ";
            $req = $DBPDO ->query($sql);

            while($flight=$req->fetch(PDO::FETCH_OBJ)) 
                {
                    $flight->mod = 'cil';

                    $data]=$flight;

                }

me reste plus qu'a optimisé un peu le code car il est crade, mais je ne pense pas que je pourrais appliquer toute ton optimisation dessus.

Merci à tous en tout cas.