Reputation: 1179
I have this array:
Array
(
[0] => Array
(
[name] => Ben
[matchedMovie] => Array
(
[name] => Saw
[genre] => Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 100.00
)
)
[1] => Array
(
[name] => Ben
[matchedMovie] => Array
(
[name] => Shooter
[genre] => Action, Thriller
[patheMovie] => The Shining
[patheMovieGenre] => Horror, Suspense/Thriller
[score] => 52.38
)
)
[2] => Array
(
[name] => Dick
[matchedMovie] => Array
(
[name] => Resident Evil Movie
[genre] => Action/Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 63.16
)
)
)
I want to sort it something like this (don't know if i got it exactly right):
Array
(
[0] => Array
(
[name] => Ben
[matchedMovie][0] => Array
(
[name] => Saw
[genre] => Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 100.00
)
[matchedMovie][1] => Array
(
[name] => Shooter
[genre] => Action, Thriller
[patheMovie] => The Shining
[patheMovieGenre] => Horror, Suspense/Thriller
[score] => 52.38
)
)
[1] => Array
(
[name] => Dick
[matchedMovie][0] => Array
(
[name] => Resident Evil Movie
[genre] => Action/Horror
[patheMovie] => Texas Chainsaw 3D
[patheMovieGenre] => Horror
[score] => 63.16
)
)
)
So that the matchedMovie arrays are under the same name. How should i do this?
I have tried this function:
function group_by_key($array) {
$result = array();
foreach ($array as $sub) {
foreach ($sub as $k => $v) {
$result[$k][] = $v;
}
}
return $result;
}
But that doesn't work.
Upvotes: 0
Views: 390
Reputation: 15301
Just a quick stab at it.
function group_by_key($array){
$result = array();
foreach($array as $row){
if(!isset($result[$row['name']]){
$result[$row['name']] = array(
'name'=>$row['name'],
'matchedMovie'=>array($row['matchedMovie'])
);
} else {
$result[$row['name']]['matchedMovie'][] = $row['matchedMovie'];
}
}
return array_values($result);
}
Upvotes: 1