【发布时间】:2017-11-28 11:33:29
【问题描述】:
我有两个对象数组,它们从 DB 查询中填充并定义如下:
array1:
foreach ($grade_records as $record) {
$grade_object = new stdClass();
$grade_object->fields = array(
'id' => $record->id,
'grade' => $record->grade,
'user_id' => $record->user_id,
'course_id' => $record->course_id,
);
array_push($grades, $grade_object);
}
数组2:
foreach ($attendance_records as $record) {
$attendance_object = new stdClass();
$attendance_object->fields = array(
'id' => $record->id,
'attendance' => $record->attendance,
'user_id' => $record->user_id,
'course_id' => $record->course_id
);
array_push($attendance, $attendance_object);
}
我想以最有效的方式将这些数组合并到一个包含对象的数组中,这些对象具有每个对象的组合属性。 我尝试使用以下代码:
foreach ($attendance as $att_record) {
foreach ($grades as $grd_record) {
if ($att_record->id == $grd_record->id) {
$new = (object) array_merge((array) $att_record, (array) $grd_record);
array_push($final_array, $new);
}
}
}
但这给了我一个没有添加“等级”属性的数组。
我也尝试过使用array_merge_recursive,但没有任何改变。
编辑: 最终使用了这个:
foreach ($att_objs as $att_key => $att_data) {
foreach ($grd_objs as $grd_key => $grd_data) {
if ($grd_data->fields['Id'] == $att_data->fields['Id']) {
$merged_obj = new stdclass();
$merged_obj->fields = array_merge($att_data->fields, $grd_data->fields);
unset($att_objs[$att_key]);
unset($grd_objs[$grd_key]);
array_push($merged_objs, $merged_obj);
}
}
}
$merged_objs = array_merge($merged_objs, $att_objs);
$merged_objs = array_merge($merged_objs, $grd_objs);
【问题讨论】:
-
执行时有什么错误吗?
-
执行时没有看到任何错误
标签: php arrays oop object merge