在PHP中使用Error错误时出错

时间:2017-04-22 10:34:41

标签: php arrays yii2

我想通过一些变量做同样的动作。所以我创建了变量的变量。但是当我循环通过$$ a时,它给我带来了错误 - “为foreach()提供的无效参数”。我检查了变量的类型。这是阵列。那么错误是什么?

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

1 个答案:

答案 0 :(得分: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);

您的代码将更容易理解。

除此之外,您可以像这样调试代码,以准确找出错误发生的位置和时间:

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

查看这是否是预期值并从那里开始。
找出原因是否是某个变量中的意外值,或者是否是代码逻辑中的错误。