Php Laravel-比较数组并在数据不同时更新

Php Laravel-比较数组并在数据不同时更新,php,arrays,laravel-5,Php,Arrays,Laravel 5,流程如下:我在列表中选择最多5名学生,然后单击“生成培训”按钮。 然后,我在会话中记录所选学生的数组。 在下一个屏幕中,我检索此数组并呈现一个带有复选框的列表,该复选框名为“已参加”,您可以在其中选择学生是否参加了培训。通过点击“记录培训”按钮,我必须更新参加培训的学生。到目前为止还不错。 问题是,我无法更新包含所有学生的原始数组。例如,如果选择了5名学员,但只有3名学员参加了培训,我应该在数据库中更新这些学员的培训,并更新原始数组,将未更改的数据与更改的数据一起保留。 下面的代码显示了我如何尝

流程如下:我在列表中选择最多5名学生,然后单击“生成培训”按钮。
然后,我在会话中记录所选学生的数组。
在下一个屏幕中,我检索此数组并呈现一个带有复选框的列表,该复选框名为“已参加”,您可以在其中选择学生是否参加了培训。通过点击“记录培训”按钮,我必须更新参加培训的学生。到目前为止还不错。
问题是,我无法更新包含所有学生的原始数组。例如,如果选择了5名学员,但只有3名学员参加了培训,我应该在数据库中更新这些学员的培训,并更新原始数组,将未更改的数据与更改的数据一起保留。
下面的代码显示了我如何尝试升级主阵列(选择所有学生)。将对代码进行注释,包括出现的错误:

// dd($ar_student); //ARRAY WITH STUDENTS WHO ENJOYED TRAINING
    // dd($all_students);//ARRAY WITH ALL SELECTED STUDENTS (MAY BE FROM 1 TO 5)
    foreach($all_students as $item1){//I GO ARRAY TO ALL STUDENTS
        foreach($ar_student as $item2){//I GO TO ARRAY THE STUDENTS ATTENDING
            // dd($item1->student_id);
            if($item1->student_id == $item2->student_id){//IF IDS ARE EQUAL
                // dd($item2);
                $all_students->fase_id = $item2->fase_id;//UPDATE ARRAY WITH ALL STUDENTS (REALLY I NEED TO UPDATE STUDENT PHASE ONLY). ERROR AT THIS LINE: Attempt to assign property of non-object
            }
        }
    }
    $students = $all_students;
    //dd($all_students);

您的错误源于试图设置数组($all_students)的“fase_id”属性而不是“item1”

此外,如果创建关联数组(学生id为键),则只能使用一个循环。 如果数组$ar\u student为[student\u id=>student],则:

foreach($all_students as $item1){
    if( isset($ar_student[$item1->student_id]) ){
        $item1->fase_id = $ar_student[$item1->student_id]->fase_id);
    }
}

您可能会在该行中出错,因为您正在尝试设置数组的属性

$all_student->fase_id=$item2->fase_id;
你应该把它改成

$item1->fase\u id=$item2->fase\u id;

错误的原因是
$all_student->fase_id
,因为
all_student
是集合,因此您可以在这里做两件事来修复错误。如果您确实想保持
$all_student
首先更新
foreach
$all_student[$key]->fase_id
,如下所示

foreach($all_students as $key => $item1){
        foreach($ar_student as $item2){
            if($item1->student_id == $item2->student_id){
                $all_students[$key]->fase_id = $item2->fase_id;
            }
        }
    }
否则使用
$item1->fase_id
如下所示

foreach($all_students as $key => $item1){
        foreach($ar_student as $item2){
            if($item1->student_id == $item2->student_id){
                $all_students[$key]->fase_id = $item2->fase_id;
            }
        }
    }
$item1->fase_id = $item2->fase_id;