Проблема с вашим кодом состоит в том, что вы сравниваете электронную почту с текущим содержимым с электронной почтой следующего.
Эта проверка не проверяет, присутствует ли уже пользователь, а просто проверяет следующего пользователя вмассив.Это будет работать только в том случае, если следующий пользователь также является текущим, а не если между ними что-то есть.
Кроме того, этот код в конечном итоге выдаст вам ошибку undefined index
, поскольку он попытается извлечь данные вследующий ключ в последней итерации.
Также неясно, откуда $hobbies
, согласно вашему объяснению, вы хотите создать массив hobbies
и добавить туда все данные.
Вы можете попробовать следующее (не проверено):
<?php
$majorArray = [
[
'fname' => 'Eli',
'lname' => 'Solo',
'hobby' => 'plants',
'id' => 1,
'email' => 'elis@elis.com',
],
[
'fname' => 'Eli',
'lname' => 'Solo',
'hobby' => 'hiking',
'id' => 1,
'email' => 'elis@elis.com',
],
];
$output = [];
foreach ($majorArray as $userData) {
// check if email already exists as key, you can also just use id for this
if (!array_key_exists($userData['email'], $output)) {
$newUserData = [
'fname' => $userData['fname'],
'lname' => $userData['lname'],
'id' => $userData['id'],
'email' => $userData['email'],
'hobbies' => [], // create the hobbies array
];
// add the newly created user data array to the output with email as key
$output[$userData['email']] = $newUserData;
}
// append the hobby to the hobbies array
$output[$userData['email']]['hobbies'][] = $userData['hobby'];
}
// array_values will reset the array keys if you need to
print_r(array_values($output));