2013-08-13 4 views
0

Je suis en train de boucler à travers un objet JSON (DATA) contenant trois objets JSON imbriqués (NEWUSERS, NEWUSERDATA, NEWRELATIONS), en utilisant une fonction de commutation pour choisir la fonction appropriée pour insérer MySQL. Chaque fonction logée dans le commutateur est appelée une fois lorsque je passe en boucle dans les touches, mais elles semblent TOUJOURS ne recevoir que l'objet NEWRELATIONS. Par conséquent, les fonctions échouent à l'exception de insertNewTestRelations, la fonction destinée à recevoir l'objet NEWRELATIONS. Je pense que la réponse doit me regarder en face, mais quelqu'un peut-il penser à la raison pour laquelle l'objet JSON est réutilisé?PHP n'itérer JSON emboîtés correctement

Lecture et itérer JSON

$json=json_decode($_SERVER['HTTP_JSON'],true); 
$data=$json['DATA']; 

foreach($data as $key=>$json_obj){ 
    $result=null; 
    $result=$db->insertNewSwitch($key,$json_obj,$last_sync); 

    $response[$key.":errors"]=$result['errors']; 
    $response[$key.":successes"]=$result['successes']; 

} 

Fonction interrupteur

public function insertNewSwitch($key,$json_obj,$last_sync){ 
    $result; 
    if($key="NEWUSERS"){ 
     $result=$this->insertNewTestUsers($json_obj,$last_sync,$key); 
    } 

    if($key="NEWUSERDATA"){ 
     $result=$this->insertNewTestUserdata($json_obj,$last_sync,$key); 
    } 

    if($key="NEWRELATIONS"){ 
     $result=$this->insertNewTestRelations($json_obj,$last_sync,$key); 
    } 


    return $result; 
} 
+2

Un problème est que votre instruction if sont ** ** assignent valeur plutôt que ** comparer les valeurs **: 'if ($ key =" NEWUSERS ") {' devrait être 'if ($ key ==" NEWUSERS ") {' –

Répondre

3

Essayez d'utiliser d'autre dans votre opérateur logique pour le commutateur, et aussi doubles égaux pour les comparaisons

public function insertNewSwitch($key,$json_obj,$last_sync){ 
    $result; 
    if($key=="NEWUSERS"){ 
     $result=$this->insertNewTestUsers($json_obj,$last_sync,$key); 
    } 

    else if($key=="NEWUSERDATA"){ 
     $result=$this->insertNewTestUserdata($json_obj,$last_sync,$key); 
    } 

    else if($key=="NEWRELATIONS"){ 
     $result=$this->insertNewTestRelations($json_obj,$last_sync,$key); 
    } 


    return $result; 
} 
+0

Ah, me regarder droit dans les yeux après tout. Merci de m'avoir aidé dans un moment de folie. –

2

Vous utilisez = pas ==. C'est probablement votre problème. Étant donné que vous affectez les valeurs, il sera évalué à true à chaque fois, de sorte que chaque instruction sera entrée.

Questions connexes