[RESOLU] Transformer un array PHP en Json

Eléphanteau du PHP | 24 Messages

28 avr. 2015, 17:03

Bonjour à tous,

Dans mon projet, je dois récupérer des données dans MySql via un Select puis prendre les valeurs des champs pour les parser en Json. J'ignore comment procéder ...

Voici mon array PHP
array(1) {
  [0]=>
  array(3) {
    ["event_tks_type"]=>
    string(6) "Parade"
    ["metrics_tks_number"]=>
    string(6) "600000"
    ["metrics_tks_name"]=>
    string(11) "spectateurs"
  }
}
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Avatar du membre
Mammouth du PHP | 1609 Messages

28 avr. 2015, 17:06

Salut qu'entends tu par "les parser en Json" ?
S'il s'agit de les convertir en json fait simplement un json_encode de ton tableau.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 09:46

Merci Saian pour ta réponse rapide :-)
J'ai utilisé le json_encode et malgré tout je n'ai pas le resultat voulu.
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 09:54

Voilà les étapes de mon code :

Mon api (Buffer) reçoit les données en Json

1. J'utilise le PDO pour me connecter à ma base de données MySql
2. Je fais un select de 3 données
3. Les données sélectionnées sont mis dans un fetch_assoc donc dans un tableau associatif.
4. J'utilise json_encode pour tranformer mon array PHP en Json
5. J'envoie cette transformation via une methode pour l'envoyer à mon application Buffer

Si ma logique est bonne, alors j'ai un problème de syntaxe :
$sqlReq = $db->prepare("SELECT event_tks_type, metrics_tks_number, metrics_tks_name
FROM `vtiger_event` 
JOIN vtiger_metrics ON metrics_tks_event = eventid
JOIN vtiger_crmentity ON crmid = metricsid
WHERE deleted =0
AND metrics_tks_number = ( 
SELECT metrics_tks_number
FROM vtiger_metrics
JOIN vtiger_crmentity ON crmid = metricsid
WHERE deleted =0
ORDER BY CAST( metrics_tks_number AS SIGNED ) DESC 
LIMIT 1 )");

$sqlReq->setFetchMode(PDO::FETCH_ASSOC);
$sqlReq->execute();

$link = $sqlReq->fetchAll();

// Envoi des données vers le queue du compte Buffer

$data['text'] = json_encode($link);

// var_dump($link);

$ret = $buffer->post('updates/create', $data, json_encode($link));

// var_dump($ret);
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Avatar du membre
Mammouth du PHP | 1609 Messages

29 avr. 2015, 10:30

Bonjour, quel est le problème que tu rencontres avec ce code ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 11:01

Je n'arrive pas a prendre les valeurs de mon tableau associatif pour l'envoyer en json a mon api.

Du coup, mon application me montre ceci : {"event_tks_type":"Parade","metrics_tks_number":"600000","metrics_tks_name":"spectateurs"}
au lieu d'avoir juste "Parade", "60000" et "spectateurs" et pourquoi pas une jolie phrase avec ces valeurs. Je ne sais pas si je suis claire :/
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Avatar du membre
Mammouth du PHP | 1609 Messages

29 avr. 2015, 11:11

Un print_r de $link après le fetchAll retourne quoi ?
Pourquoi chercher à convertir le tableau en json si tu veux écrire une chaine de caractère avec les données du tableau ? Pourquoi ne pas le faire directement ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 12:07

Que veux tu dire par directement ?

Si je procède ainsi c'est parce que l'application à qui j'envoie les données de mon tableau doit être en json.

En gros, l'application Buffer doit pouvoir me montrer une phrase du style : "6000 spectateurs à la parade".

Mais pour qu'il me montre cette phrase, je dois pouvoir récupérer les valeurs "parade", "6000" et "spectateurs" puis les mettre dans une phrase.
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 12:07

Le fecthAll me retourne l'array de mon premier message :/
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Avatar du membre
Mammouth du PHP | 1609 Messages

29 avr. 2015, 12:32

Pourquoi ne pas faire simplement ça ?
$data['text'] = $link[0]['metrics_tks_number'].' '.$link[0]['metrics_tks_name'].' à la '.$link[0]['event_tks_type'];
$ret = $buffer->post('updates/create', $data);
EDIT
Au lieu de faire un fetchAll tu peux faire un fetch, ça te retournera un tableau avec directement les 3 colonnes au lieu d'avoir un niveau de plus.
Et si tu utilises PDO::FETCH_NUM au lieu de PDO::FETCH_ASSOC tu obtiendras un tableau sans les labels metrics_tks_number etc et lors de la conversion json tu devrais obtenir un tableau contenant uniquement les valeurs.
Modifié en dernier par Saian le 29 avr. 2015, 12:42, modifié 1 fois.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 12:41

Parce que mon application ne lit que "à la" et aucune des données alors que le print_r me renvoie un tableau bien rempli
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "

Avatar du membre
Mammouth du PHP | 1609 Messages

29 avr. 2015, 12:45

Si le var_dump après le fetchAll retourne bien ce que tu as affiché dans le premier post, je peux t'assurer qu'un echo $data['text'] (juste après le $data['text'] = ...) va bien afficher :
600000 spectateurs à la Parade
$sqlReq->setFetchMode(PDO::FETCH_ASSOC);
$sqlReq->execute();
$link = $sqlReq->fetchAll();
var_dump($link);
/*
array(1) {
  [0]=>
  array(3) {
    ["event_tks_type"]=>
    string(6) "Parade"
    ["metrics_tks_number"]=>
    string(6) "600000"
    ["metrics_tks_name"]=>
    string(11) "spectateurs"
  }
}
*/
$data['text'] = $link[0]['metrics_tks_number'].' '.$link[0]['metrics_tks_name'].' à la '.$link[0]['event_tks_type'];
echo $data['text'];// 600000 spectateurs à la Parade
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

29 avr. 2015, 12:52

Un tout grand merci à toi ! Effectivement ça fonctionne, je vais pouvoir avancer :-)
" Le Chêne fut un gland avant de devenir le Majestueux Grand Chêne "