在PHP中使用错误错误时发生错误
问题描述:
我想通过一些变量执行相同的操作。所以我创建了变量的变量。但它是抛出错误 - “为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();
}
}
答
您的数组不包含的变量(例如$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();
}
}
看看这是预期值,并从那里继续进行。
找出原因是其中一个变量的意外值,还是代码逻辑中的错误。
同样的错误。我想你不明白我的问题。我想循环$ edu_data使用PHP – Ish
的变量功能的变量是的,我得到所有期望值,类型也是数组。但我得到那个错误。我已经厌倦了这种调试方式。 – Ish
我知道你告诉我做这个功能并继续前进的方式。但我想了解我的方法中的缺陷。 – Ish