Reputation: 347
I have a multidimensional-array which looks like this:
$array = (
[0] => array (
['WS'] => array(
[id] => 2,
[name] => 'hello'
)
)
),
[1] => array (
['SS'] => array(
[id] => 1,
[name] => 'hello2'
)
)
),
[2] => array (
['WS'] => array(
[id] => 5,
[name] => 'helloAGAIN'
)
)
)
As you can see, $array[0] and $array[2] have the same key [WS]. I need a function to find those "same keys". Afterthat I would merge these two arrays into one. f.e.
$array =
(
[0] => array
(
['WS'] => array
(
[0] => array
(
[id] => 2,
[name] => 'hello'
),
[1] => array
(
[id] => 5,
[name] => 'helloAGAIN'
)
)
),
[1] => array
(
['SS'] => array
(
[0] => array
(
[id] => 1,
[name] => 'hello2'
)
)
)
)
Hope you guys understand my problem. greets
Upvotes: 1
Views: 4607
Reputation: 181
You could simply eliminate the first level of your array and you would end up with something like this:
$array = (
['WS'] => array(
[0] => array(
[id] => 2,
[name] => 'hello'
),
[1] => array(
[id] => 5,
[name] => 'helloAGAIN'
)
),
['SS'] => array(
[0] => array(
[id] => 1,
[name] => 'hello2'
)
)
)
That way you can add things to your array like this:
$array['WS'][] = array();
Upvotes: 1
Reputation: 12149
you can just loop through the array and delete matching elements
$multiArray = array('0' => etc etc);
$matches = array();
foreach(multiArray as $key => $val)
{
$keyValToCheck = key($val);
if(!in_array($keyValToCheck, $matches))
{
$matches[] = $keyValToCheck; // add value to array matches
// remove item from array because match has been found
unset($multiArray[$key][$keyValToCheck]);
}
}
Upvotes: 1
Reputation: 88647
function group_by_key ($array) {
$result = array();
foreach ($array as $sub) {
foreach ($sub as $k => $v) {
$result[$k][] = $v;
}
}
return $result;
}
Upvotes: 8