Я видел множество связанных вопросов, но никто не ответил на это для меня - я извиняюсь, если это из-за моего недостатка знаний ...
У меня есть массив $contacts
, где каждая запись выглядит ниже, с 1-многими контактами:
[{internal_id}]=>
array(3) {
[0]=>
array(6) {
["name"]=>
string(13) "matching name"
["bphone"]=>
string(13) "(123)345-5678"
["cphone"]=>
string(13) "(321)345-6857"
["hphone"]=>
string(13) "(123)543-5790"
["email"]=>
string(0) ""
["email2"]=>
string(0) ""
}
[1]=>
array(6) {
["name"]=>
string(13) "matching name"
["bphone"]=>
string(13) "(123)345-5678"
["cphone"]=>
string(0) ""
["hphone"]=>
string(0) ""
["email"]=>
string(20) "margethis@please.com"
["email2"]=>
string(21) "mergethis2@please.com"
}
[2]=>
array(6) {
["name"]=>
string(17) "not matching name"
["bphone"]=>
string(13) "(123)987-6453"
["cphone"]=>
string(13) "(321)789-3546"
["hphone"]=>
string(0) ""
["email"]=>
string(21) "email@popularmail.com"
["email2"]=>
string(22) "email2@popularmail.com"
}
}
Я хочу объединить любые одинаковые имена для каждой записи, сохраняя соответствующую контактную информацию. Попытка это:
$i = 1; //1 > 0 so no need to +1 each time it's used in this case
foreach($contacts as $contact){
if($contact['name'] == $contacts[$i]['name']){
$contact = array_merge($contact, $contacts[$i]);
unset($contacts[$i]);
}
$i++;
}
Мой ожидаемый / желаемый результат будет:
[{internal_id}]=>
array(2) {
[0]=>
array(6) {
["name"]=>
string(13) "matching name"
["bphone"]=>
string(13) "(123)345-5678"
["cphone"]=>
string(13) "(321)345-6857"
["hphone"]=>
string(13) "(123)543-5790"
["email"]=>
string(20) "margethis@please.com"
["email2"]=>
string(21) "mergethis2@please.com"
}
[1]=>
array(6) {
["name"]=>
string(17) "not matching name"
["bphone"]=>
string(13) "(123)987-6453"
["cphone"]=>
string(13) "(321)789-3546"
["hphone"]=>
string(0) ""
["email"]=>
string(21) "email@popularmail.com"
["email2"]=>
string(22) "email2@popularmail.com"
}
}
Но l oop не имеет никакого эффекта, по крайней мере, я не могу найти. Мой фактический вывод соответствует исходному массиву.
Что мне здесь не хватает?
EDIT / UPDATE: Простая путаница при передаче по ссылке / значению. Спасибо @Barmar за быстрое решение. Никаких изменений не было отражено в массиве, потому что я никогда не говорил php обновить эти значения. Шокирует, как это работает.