2017-04-22 92 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