2017-04-22 101 views
0

我想通过一些变量执行相同的操作。所以我创建了变量的变量。但它是抛出错误 - “为foreach()提供的无效参数”,当我循环通过$$ a。我已检查变量的类型。它是数组。那么错误是什么?在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(); 
     } 
    } 

回答

3

您的数组不包含的变量(例如$model_edu),但只有各自的名称为字符串值('model_edu')。 编辑:我的坏,我没有注意到这是故意的。

我建议使用函数:

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); 

您的代码会更容易comprehendable。

除此之外,您可以调试这样的代码,找出确切位置,并在错误发生时:

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(); 
    } 
} 

看看这是预期值,并从那里继续进行。
找出原因是其中一个变量的意外值,还是代码逻辑中的错误。

+0

同样的错误。我想你不明白我的问题。我想循环$ edu_data使用PHP – Ish

+0

的变量功能的变量是的,我得到所有期望值,类型也是数组。但我得到那个错误。我已经厌倦了这种调试方式。 – Ish

+0

我知道你告诉我做这个功能并继续前进的方式。但我想了解我的方法中的缺陷。 – Ish