繁体   English   中英

使用PHP中的错误时出错

[英]Error while using Error of error in PHP

我想通过一些变量执行相同的操作。 所以我创建了变量variables。 但这使我出错-当我通过$$ 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();
        }
    }

您的数组不包含变量(例如$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();
    }
}

看看这是否是期望值,然后从那里继续。
找出原因是否是您的变量之一中的意外值,或者它是否是代码逻辑中的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM