Reputation: 18614
Suppose I have 2 arrays:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black"
),
array (
"animal" => "mouse",
"color" => "white"
)
);
$arr2 = array (
array (
"title" => "mouse",
"name" => "Abby"
),
array (
"title" => "dog",
"name" => "Rex"
),
array (
"title" => "dog",
"name" => "Barney"
),
array (
"title" => "mouse",
"name" => "Georgie"
)
);
I now want to join them by key (animal
from $arr1
and title
from $arr2
) so that I have:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => "Rex",
"name" => "Barney"
),
array (
"animal" => "mouse",
"color" => "white",
"name" => "Abby",
"name" => "Georgie"
)
);
So just add the names of dog
and mouse
from $arr2
.
My solution was:
foreach ( $arr1 as $key1 => $entry1 ) {
foreach ( $arr2 as $key2 => $entry2 ) {
if ($entry1 ["animal"] == $entry2 ["title"]) {
$arr1 [$key1] ["name"] = $entry2 ["name"];
}
}
}
But it overwrites the first entry and so that I only get the last names:
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => "Barney"
),
array (
"animal" => "mouse",
"color" => "white",
"name" => "Georgie"
)
);
I looked at array_merge(), but it just merges the arrays without comparing their keys.
Upvotes: 1
Views: 67
Reputation: 7805
So name index must be an array :)
try as follow
foreach ( $arr1 as $key1 => $entry1 ) {
foreach ( $arr2 as $key2 => $entry2 ) {
if ($entry1 ["animal"] == $entry2 ["title"]) {
if (!isset($arr1[$key1]["name"])) {
$arr1[$key1]["name"] = array();
}
$arr1 [$key1]["name"][] = $entry2 ["name"];
}
}
}
OUTPUT
$arr1 = array (
array (
"animal" => "cat",
"color" => "grey"
),
array (
"animal" => "dog",
"color" => "black",
"name" => ["Rex", "Barney" ]
),
array (
"animal" => "mouse",
"color" => "white",
"name" => ["Abby", "Georgie"]
)
);
Upvotes: 2