Gabriel Caruso
Gabriel Caruso

Reputation: 869

array_flip with an array in the value

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

Answers (4)

Val
Val

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

Alessandro Minoccheri
Alessandro Minoccheri

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

u_mulder
u_mulder

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

VK321
VK321

Reputation: 5963

Try this:

foreach ($yourArr as $role) {
 foreach ($role['name'] as $user) {
    $arr[$user] = $role['role'];
 }
}

Upvotes: 2

Related Questions