Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/01/2011, 12h16   #1
rib
Membre à l'essai
 
Inscription : janvier 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 70
Points : 23
Points : 23
Par défaut Obj et tableaux

bonjours, je transmet un json via ajax a un fichier php
ce fichier php décode le json et doit reconstruire un array (key,valeur) des données contenu dans le json.

mais je n'arrive pas a récupérer la key après le json_decode.

voila mon code de test:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php 
define ('ASSASSIN_ROOT', './');
$assassin_root = ASSASSIN_ROOT;
?>
 
<script type="text/javascript" src="<?php echo $assassin_root; ?>js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="<?php echo $assassin_root; ?>js/jquery.json.js"></script>
 
<script>
// test variables
var obj = {id_div:'test',json:'this is a test json property',xml:'this is a test xml property'};
// encoding an object
var a = $.JSON.encode(obj);
 
$.ajax({
				type: 'GET',
				url:'Load_2.php',
				data:{json: a},
				success: function(html) {
	       		 $('#'+a.id_div).html(html);
				},
				async: false
			});
</script>
 
<div id="test">
</div>
le fichier ki doit traiter le json:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
define ('ASSASSIN_ROOT', './');
require_once ASSASSIN_ROOT.'commun.php';
 
// L'objet user, démarrage de la session utilisateur
$user = new AeUser();
$user->session_begin();
$assassin_root = ASSASSIN_ROOT;
 
function wrap_tpl ($data , $template) {
 
    extract($data);
    ob_start();
    include $template;
    $layout_content = ob_get_contents();
    ob_end_clean();
 
    return $layout_content;
}
 
 
if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {
 
$data=array();
 
if($_GET['json']){
$json = $_GET['json'];
$obj = json_decode($json);
foreach ($obj as $json_variables){
	array_push($data, array($json_variables => $json_variables));
}
}
 
 
print_r ($data); 
//var_dump(json_decode($json, true));
 
//echo wrap_tpl ($data , $template);
 
}
?>
voici la réponse de ce fichier:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [0] => Array
        (
            [test] => test
        )
 
    [1] => Array
        (
            [this is a test json property] => this is a test json property
        )
 
    [2] => Array
        (
            [this is a test xml property] => this is a test xml property
        )
 
)
comment puis-je remplacer [test] par [id_div] par exemple.

si quelqu'un pourrait m'aiguiller sur la solution sa m'aiderait bien.
merci d'avance.
rib est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 12h54   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Tu as oublié de spécifier la clé dans le foreach:
Code :
1
2
3
4
 
foreach ($obj as $json_key => $json_variables){
	$data[] = array($json_key => $json_variables);
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 13h49   #3
rib
Membre à l'essai
 
Inscription : janvier 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 70
Points : 23
Points : 23
avec sa j'obtient:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [0] => Array
        (
            [id_div] => test
        )
 
    [1] => Array
        (
            [template] => test2.php
        )
 
    [2] => Array
        (
            [test] => ceci est un test
        )
 
)
serait til possible d'obtenir:

Code :
1
2
3
4
5
6
Array
(
    [id_div] => test
    [template] => test2.php
    [test] => ceci est un test
)
ou sinon comment puis-je acceder a $data['id_div'].
merci d'avance.
rib est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 14h01   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Salut

Etant donné que c'est un tableau associatif que tu souhaite, et bien la fonction json_decode() le permet (au lieu d'avoir un Objet), suffit de mettre TRUE en 2ème argument :
Citation:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
Exemple de la doc :
Code :
1
2
3
4
5
6
 
// Contenu du JSON
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
 
 
var_dump(json_decode($json, true));
Affichera :
Code :
1
2
3
4
5
6
7
8
 
array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Ce qui permettra d'accéder directement aux clés.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h50.


 
 
 
 
Partenaires

Hébergement Web