我有一个数据库表,它会返回一个像这样的数组
$roles['admin'] = 'app1,app2,app3';
$roles['moderator'] = 'app2,app3';
现在我想遍历此数组以在我的视图中显示,但我想在每个角色中显示所有角色,而不是在每个角色中显示所有角色。
理想情况下,我希望上面的数组成为这个
$apps['app1'] = 'admin';
$apps['app2'] = 'admin,moderator';
$apps['app3'] = 'admin,moderator';
我一直试图解决这个问题2个小时,但由于某些原因我无法找到一种有效的方法。
答案 0 :(得分:2)
以下内容将遍历您的数组并将其加载到相应的数组中。它通过遍历数组的每个部分并遍历它来工作。
<?php
$apps = array();
foreach($roles as $key1 => $value1){
$parts = explode(',', $value1);
foreach($parts as $key2 => $value2){
$apps[$value2] .= (strlen($apps[$value2])>0)?",":"").$key1;
}
}
?>
答案 1 :(得分:1)
您可以使用array_reduce
,array_keys
和explode
将一个数组映射到另一个数组,以将CSV值转换为数组
$apps = array_reduce(array_keys($roles), function($apps, $key) use ($roles) {
foreach (explode(',', $roles[$key]) as $app) $apps[$app][] = $key;
return $apps;
}, []);
请注意,结果与您想要的结果略有不同,因为值本身是数组而不是逗号分隔的字符串。
Array
(
[app1] => Array
(
[0] => admin
)
[app2] => Array
(
[0] => admin
[1] => moderator
)
[app3] => Array
(
[0] => admin
[1] => moderator
)
)
如果您确实需要CSV值,请添加此
$apps = array_map(function($list) {
return implode(',', $list);
}, $apps);
产生
Array
(
[app1] => admin
[app2] => admin,moderator
[app3] => admin,moderator
)