-1

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

Colwin
  • 2,655
  • 3
  • 25
  • 25
Gabriel Caruso
  • 789
  • 1
  • 7
  • 17

4 Answers4

2

Try this:

foreach ($yourArr as $role) {
 foreach ($role['name'] as $user) {
    $arr[$user] = $role['role'];
 }
}
VK321
  • 5,768
  • 3
  • 44
  • 47
1

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'];
       }
    }
Alessandro Minoccheri
  • 35,521
  • 22
  • 122
  • 171
1

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);
Val
  • 21,938
  • 10
  • 68
  • 86
0

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>';
u_mulder
  • 54,101
  • 5
  • 48
  • 64