php - PHP:遍历多维数组(4D)
问题描述
我有一个结构如下的多维数组。它模仿基于./YEAR/MONTH/DAY/FILE 存储文件的文件结构。
Array
(
[2019] => Array
(
[05] => Array
(
[12] => Array
(
[0] => default.md
)
)
[12] => Array
(
[22] => Array
(
[0] => default.md
)
)
)
[2020] => Array
(
[05] => Array
(
[19] => Array
(
[0] => default.md
)
)
)
)
我正在尝试遍历整个数组并获取每个特定文件的值,同时还获取该指定文件的相关 YEAR、MONTH 和 DAY。
我的循环很遥远,因为我试图在 for 循环中嵌套多个 foreach 循环。我得到的兔子洞越深,我遇到的问题就越多
$post_search = directoryArrayMap("content"); //function that creates the array
$year = array_keys($post_search);
for($i = 0; $i < count($post_search); $i++ ) {
echo $year[$i] . "<br>";
foreach($post_search[$year[$i]] as $month => $day ) {
echo $month[$i] . "<br>";
foreach($post_search[$key[$month[$i]]] as $day => $post_file ) {
echo $day . "<br>";
}
}
}
我正在寻找迭代多维数组的最佳方法。谢谢。我想要的输出是这样的:
档案一: 年份:2020 月:05 天数:12 文件 B: 年份:2019 月:12 天数:22 文件 C: 年份:2019 月:05 天数:19
目标是与另一个检查“is_file”并显示输出的循环一起运行它。
解决方案
使用函数来处理令人困惑的嵌套方面应该会有很大帮助。我的例子绝不是一个强大的解决方案。就个人而言,我可能会将函数放在一个类中并使其面向对象......但这绝对不是每种情况的正确解决方案。
你必须适应这个,但希望这个概念是有帮助的。
function handleYear($year,$arrOfMonths){
echo $year;
foreach ($arrOfMonths as $month=>$arrOfDays){
handleMonth($month,$arrOfDays);
}
}
function handleMonth($month,$arrOfDays){
echo $month;
foreach ($arrOfDays as $dayOfMonth=>$listOfFiles){
handleDay($dayOfMonth,$listOfFiles);
}
}
//to get started
foreach ($data as $year=>$arrOfMonths){
echo $year;
handleYear($year, $arrOfMonths);
}
您还可以修改子函数以接受父参数。喜欢handleMonth
也可以拿在年,然后handleYear
就过去了$year
。
编辑:
看到你想要的输出后......我建议将年份和月份传递给handleDay
函数。然后handleDay
可能是这样的:
function handleDay($day,$arrOfFiles,$year,$month) use (&$files){
foreach ($arrOfFiles as $index=>$fileName){
$file = ['year'=>$year,'month'=>$month,'day'=>$day];
$files[] = $file;
}
}
然后,您需要在声明我没记错$files = []
之前在函数外部声明。handleDay
但是,您将拥有一组可以轻松使用的文件。
就个人而言,我可能会辛辛苦苦想出一个更清洁的解决方案(use
在这种情况下不喜欢这种说法,我什至可能没有正确使用它)。如果它在一个类中,那么您可以使用$this->files
而不是use (&$files)
.
推荐阅读
- python - 如何在 python 3 中添加 30 分钟的时间对象?
- python - 检查Python中浮点数是否正常
- r - R中的方差 - 协方差矩阵
- html - DIV 未显示在正确位置的问题 - 已解决
- ios - 在构建目标为 iOS 12 的项目中加载 SwiftUI 画布是否存在一些问题?
- image - 如何在 Markdown 上调整图像大小?
- vim - 如何确保 formatoptions *never* 包含 `r` 或 `o`?
- javascript - 扫描直到找到 x 个项目?
- ios - 删除最后一项后如何隐藏 tableView 中的部分?
- commonjs - 编译成功后需要缓冲区的模块无法工作