Вы можете использовать array_replace_recusrive
в индексированных массивах userId
.
Сначала используйте array_column
для индексации массивов по userId
.
Затем используйте array_replace_recursive
для объединения значений в массивах и сохранения индексов ключей обоих наборов массивов.
Наконец, используйте array_intersect_key
, чтобы возвращать только значения массива из массива $marks
.
$students = array_column($students, null, 'userId');
$marks = array_column($marks, null, 'userId');
$marks_sheet = array_intersect_key(array_replace_recursive($students, $marks), $marks);
Результат
Array
(
[user1] => Array
(
[userId] => user1
[name] => Suman Mandal
[age] => 20
[marks] => 80
)
[user3] => Array
(
[userId] => user3
[name] => Asif Rahman
[age] => 25
[marks] => 90
)
)
Если вам нужно, чтобы конечный результат не индексировался userId
, вы можете использовать array_values
, который будет переиндексировать массив.
$marks_sheet = array_values(
array_intersect_key(array_replace_recursive($students, $marks), $marks)
);
Результат
Array
(
[0] => Array
(
[userId] => user1
[name] => Suman Mandal
[age] => 20
[marks] => 80
)
[1] => Array
(
[userId] => user3
[name] => Asif Rahman
[age] => 25
[marks] => 90
)
)
В качестве альтернативы вы можете перебирать оценки и учеников для создания массива marks_sheet.
$marks_sheet = [];
foreach ($marks as $mark) {
foreach ($students as $student) {
if ($student['userId'] === $mark['userId']) {
$mark_sheet = $student;
foreach ($mark as $key => $value) {
$mark_sheet[$key] = $value;
}
$marks_sheet[] = $mark_sheet;
}
}
}
Результат
Array
(
[0] => Array
(
[userId] => user1
[name] => Suman Mandal
[age] => 20
[marks] => 80
)
[1] => Array
(
[userId] => user3
[name] => Asif Rahman
[age] => 25
[marks] => 90
)
)