php - Laravel 集合拆分成多维数组
问题描述
我需要一个函数来将 Laravel 中的集合转换为多维数组,也许有人有这样的东西。
我拥有的是这个权限集合:
Illuminate\Support\Collection {#1190 ▼
#items: array:10 [▼
0 => "admin.users.view"
1 => "admin.roles.create"
2 => "admin.roles.view"
3 => "admin.roles.edit"
4 => "admin.roles.delete"
5 => "admin.roles.set"
6 => "admin.whitelist.edit"
7 => "admin.ticket.view"
8 => "admin.ticket.edit"
9 => "admin.ticket.create"
]
}
现在我想按每个点拆分它,结果应该如下所示:
[
"admin" => [
"users" => [
"view"
],
"roles" => [
"create",
"view",
"edit",
"delete",
"set"
],
"whitelist" => [
"edit"
],
"ticket" => [
"view",
"edit",
"create"
]
]
]
我知道应该可以使用映射或为其创建一个函数并制作一个 foreach 和类似的东西,但在花费数小时获得解决方案之前,我会问是否有人为它剪裁过。
预先感谢您对我们的支持。
来自德国 Patrick 的问候
解决方案
可能有更多的 Laravel 方法可以做到这一点。但是,以下代码将根据您提供的字符串创建一个嵌套数组。
$result = [];
foreach ($strings as $string) {
// Assign back to the root (new start for current string)
$previous = &$result;
$pieces = explode('.', $string);
$piecesCount = count($pieces);
$lastIndex = $piecesCount - 1;
for ($i = 0; $i < $piecesCount; $i++) {
// Only interested in pushing the last piece as value.
if ($i == $lastIndex) {
$previous[] = $pieces[$i];
continue;
}
if (!key_exists($pieces[$i], $previous)) {
$previous[$pieces[$i]] = [];
}
// Go down the nested array by assigning its reference.
$previous = &$previous[$pieces[$i]];
}
}
结果:
Array
(
[admin] => Array
(
[users] => Array
(
[0] => view
)
[roles] => Array
(
[0] => create
[1] => view
[2] => edit
[3] => delete
[4] => set
)
[whitelist] => Array
(
[0] => edit
)
[ticket] => Array
(
[0] => view
[1] => edit
[2] => create
)
)
)
推荐阅读
- javascript - 无法转换 kotlin-stdlib-1.4.10.jar 以匹配属性
- javascript - 特定时间的错误信息
- go - 通过 .spec.selector.matchLabels 键使用 apimachinery 列出部署
- mysql - 全文搜索 - 我应该选择专用搜索引擎(SOLR、Elastic)还是 RDBMS 之一?
- variables - 如何将变量传递/连接到`aws_instance`资源中的`data.aws_ami`部分
- linux - 作为独立的 Linux 用户运行 Firefox
- heroku - 在“Gemfile.lock 中的 BUNDLED WITH 版本”处推送 heroku freez
- botframework - 在 bot composer 中设置属性时是否可以扩展 jPath 中的变量?
- python - python-读取文本文件
- javascript - 如何在此 while 循环中添加计数器