Reputation: 869
Simple one (but not solved yet): this is my array
[
[
"role" => "admin",
"name" => [
"Felipy",
"Ivan",
],
],
[
"role" => "user",
"name" => [
"Michel",
"Paul",
"Tay",
],
]
And I would love to see this result:
[
"Felipy" => "admin",
"Ivan" => "admin",
"Michael" => "user",
"Paul" => "user",
"Tay" => "user",
]
I've already tried array_flip
Upvotes: -1
Views: 1171
Reputation: 22797
Try this Live demo
$array = [
[
"role" => "admin",
"name" => [
"Felipy",
"Ivan",
]
],
[
"role" => "user",
"name" => [
"Michel",
"Paul",
"Tay"
]
]
];
$result = array_reduce($array, function($carry, $key) {
foreach ($key['name'] as $name)
$carry[$name] = $key['role'];
return $carry;
}, []);
var_dump($result);
Upvotes: 1
Reputation: 35973
try this DEMO
$original = [
[
"role" => "admin",
"name" => [
"Felipy",
"Ivan",
],
],
[
"role" => "user",
"name" => [
"Michel",
"Paul",
"Tay",
],
]
];
$arr = [];
foreach ($original as $value)
{
foreach($value['name'] as $name)
{
$arr[$name] = $value['role'];
}
}
Upvotes: 1
Reputation: 54831
Less clear but still working solution:
$a = [
[
"role" => "admin",
"name" => [
"Felipy",
"Ivan",
],
],
[
"role" => "user",
"name" => [
"Michel",
"Paul",
"Tay",
],
],
];
$r = [];
foreach ($a as $item) {
$r = array_merge($r, array_fill_keys($item['name'], $item['role']));
}
echo'<pre>',print_r($r),'</pre>';
Upvotes: 0
Reputation: 5963
Try this:
foreach ($yourArr as $role) {
foreach ($role['name'] as $user) {
$arr[$user] = $role['role'];
}
}
Upvotes: 2