Php 遍历复杂数组的有效方法
我有一个数据库表,它将返回类似这样的数组Php 遍历复杂数组的有效方法,php,arrays,Php,Arrays,我有一个数据库表,它将返回类似这样的数组 $roles['admin'] = 'app1,app2,app3'; $roles['moderator'] = 'app2,app3'; 现在我想遍历此数组以显示在我的视图中,但我不想显示每个角色内的所有应用程序,而是希望显示每个应用程序内的所有角色 理想情况下,我希望上面的数组变成这样 $apps['app1'] = 'admin'; $apps['app2'] = 'admin,moderator'; $apps['app3'] = 'admi
$roles['admin'] = 'app1,app2,app3';
$roles['moderator'] = 'app2,app3';
现在我想遍历此数组以显示在我的视图中,但我不想显示每个角色内的所有应用程序,而是希望显示每个应用程序内的所有角色
理想情况下,我希望上面的数组变成这样
$apps['app1'] = 'admin';
$apps['app2'] = 'admin,moderator';
$apps['app3'] = 'admin,moderator';
我已经尝试解决这个问题两个小时了,但由于某些原因,我找不到一种有效的方法来解决这个问题。您可以使用将一个数组映射到另一个数组,并将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
)
您可以使用和将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
)
以下内容将遍历您的数组并将其加载到相应的数组中。它通过遍历数组的每个部分并遍历它来工作
<?php
$apps = array();
foreach($roles as $key1 => $value1){
$parts = explode(',', $value1);
foreach($parts as $key2 => $value2){
$apps[$value2] .= (strlen($apps[$value2])>0)?",":"").$key1;
}
}
?>
以下命令将遍历您的数组并将其加载到相应的数组中。它通过遍历数组的每个部分并遍历它来工作
<?php
$apps = array();
foreach($roles as $key1 => $value1){
$parts = explode(',', $value1);
foreach($parts as $key2 => $value2){
$apps[$value2] .= (strlen($apps[$value2])>0)?",":"").$key1;
}
}
?>
这里的所有代码都是为数组赋值。预期的行为是什么?你想让代码做什么,而它目前没有做什么?“映射”,你想把数组映射到另一种形式mult-d数组会比字符串值除数器容易吗?这对foreach和explode来说真的没有那么难…你应该展示你尝试过的不起作用的东西。这里代码所做的就是为数组赋值。预期的行为是什么?你想让代码做什么,而它目前没有做什么?“映射”,你想把数组映射到另一种形式mult-d数组会比字符串值除数器容易吗?这对foreach和explode来说真的没有那么难…你应该展示你尝试过的不起作用的东西。这太完美了,非常感谢:)这太完美了,非常感谢:)