Bry*_*ing 8 php arrays multidimensional-array
我希望能够知道正在构建的数组的级别.
代码循环通过一堆目录来创建一个大规模的多维数组.
在创建数组时,我想知道数组的深度.
1 2 3 4
---------------------
Root
A
A2
A3
A4
A4a
B
B2
B3
C
D
E
E2
E2a
E3
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,根目录位于级别1.所有单个大写字母都在级别2中.所有带有数字的大写字母都在级别3中.所有带有数字和小写字母的大写字母都在级别4中.
当我正在构建数组时,有什么方法可以让我知道我在哪个级别?正在使用递归函数创建数组.
这是一个PHP问题.
这可能与你关于数组的问题相关,但你可以通过使用递归目录迭代器一举两得.
$path_to_root = __DIR__;
$directories = new ParentIterator(new RecursiveDirectoryIterator($path_to_root, RecursiveDirectoryIterator::CURRENT_AS_SELF));
$iterator = new RecursiveIteratorIterator($directories, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $item)
{
printf("%d %s\n", $iterator->getDepth() + 1, $item->getSubPathname());
}
Run Code Online (Sandbox Code Playgroud)
哪个输出会像:
1 Root
2 Root/A
3 Root/A/A2
3 Root/A/A3
3 Root/A/A4
4 Root/A/A4/A4a
2 Root/B
3 Root/B/B2
3 Root/B/B3
2 Root/C
2 Root/D
2 Root/E
3 Root/E/E2
4 Root/E/E2/E2a
3 Root/E/E3
Run Code Online (Sandbox Code Playgroud)
正如您所看到的RecursiveIteratorIterator::getDepth(),用于获取递归迭代器的当前深度,这是建议此方法的原因.
假设您的数组结构类似于:
$dirs = array(
'Root' => array(
'A' => array(
'A2' => array(),
'A3' => array(),
'A4' => array(
'A4a' => array(),
),
),
'B' => array(
'B2' => array(),
'B3' => array(),
),
'C' => array(),
'D' => array(),
'E' => array(
'E2' => array(
'E2a' => array(),
),
'E3' => array(),
),
),
);
Run Code Online (Sandbox Code Playgroud)
然后可以使用一种非常类似的方法从递归目录迭代器获取值(但这次使用递归数组迭代器).快速循环"父"数组可以为我们提供从当前项回到根的"路径".
$recursive = new ParentIterator(new RecursiveArrayiterator($dirs));
$iterator = new RecursiveIteratorIterator($recursive, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $item)
{
// Build path from "parent" array keys
for ($path = "", $i = 0; $i <= $iterator->getDepth(); $i++) {
$path .= "/" . $iterator->getSubIterator($i)->key();
}
// Output depth and "path"
printf("%d %s\n", $iterator->getDepth() + 1, ltrim($path, "/"));
}
Run Code Online (Sandbox Code Playgroud)
输出将与目录迭代器的早期输出相同.
TL; DR我们可以使用SPL迭代器中的递归迭代器来更简单地处理递归/深层结构.
TL; DR; TL; DR SPL,哎呀!
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |