2017-04-22 1 views
0

Je veux faire les mêmes actions à travers certaines variables. J'ai donc créé les variables de variables. Mais il me lance une erreur - "argument invalide fourni pour foreach()" quand je suis en boucle à travers un $$. J'ai vérifié le type de la variable. C'est un tableau. Alors quelle est l'erreur?Erreur lors de l'utilisation Erreur d'erreur dans PHP

$edu_data = Json::decode($model->education); 
    $exp_data = Json::decode($model->experience); 
    $avail_data = Json::decode($model->availability); 
    $docs_data = Json::decode($model->documents); 

    $model_edu = new \admin\models\ApplicantEducation(); 
    $model_exp = new \admin\models\ApplicantExperience(); 
    $model_avail = new \admin\models\Availability(); 
    $model_cre = new \admin\models\Credential(); 

    $all = array('edu_data' => 'model_edu', 'exp_data' => 'model_exp', 'avail_data' => 'model_avail', 'docs_data' => 'model_cre'); 
    foreach ($all as $a => $s) 
    { 
     $arr = $$a; 
     foreach ($arr as $v) 
     { 
      $$s->applicant_id = $applicant_id; 
      foreach ($arr[1] as $k1 => $v1) 
      { 
       $$s->$k1 = $v[$k1]; 
      } 
      $$s->save(); 
     } 
    } 

Répondre

3

Votre tableau ne contient pas vos variables (par exemple $model_edu), mais seulement leurs noms respectifs sous forme de chaîne ('model_edu'). Modifier: Mon mauvais, je n'ai pas remarqué que c'est intentionnel.

Je suggère d'utiliser une fonction:

function process_data($model, $data, $applicant_id) { 
    foreach ($data as $v) { 
     $model->applicant_id = $applicant_id; 
     foreach ($data[1] as $k1 => $v1) 
     { 
      $model->$k1 = $v[$k1]; 
     } 
     $model->save(); 
    } 
} 

process_data($model_edu, $edu_data); 
process_data($model_exp, $exp_data); 
process_data($model_avail, $avail_data); 
process_data($model_docs, $docs_data); 

Votre code sera plus facilement comprehendable.

En dehors de cela, vous pouvez déboguer votre code comme celui-ci pour savoir exactement où et quand l'erreur se produit:

foreach ($all as $a => $s) 
{ 
    $arr = $$a; 

    var_dump($arr); 

    foreach ($arr as $v) 
    { 
     $$s->applicant_id = $applicant_id; 

     var_dump($arr[1]); 

     foreach ($arr[1] as $k1 => $v1) 
     { 
      $$s->$k1 = $v[$k1]; 
     } 
     $$s->save(); 
    } 
} 

voir si cela est la valeur attendue et procéder à partir de là.
Déterminez si la raison est une valeur inattendue dans l'une de vos variables ou s'il s'agit d'une erreur dans la logique du code.

+0

même erreur. Je pense que vous n'avez pas compris ma question. Je veux passer à travers $ edu_data en utilisant la variable de la fonctionnalité variable de PHP – Ish

+0

oui, je reçois toute la valeur attendue et le type est également tableau. mais j'ai cette erreur. J'ai fatigué de déboguer de cette façon déjà. – Ish

+0

Je connais la façon dont tu m'as dit de faire la fonction et d'aller de l'avant. Mais je veux comprendre la faille dans mon approche. – Ish