php - 将多维数组转换为文件路径
问题描述
如何将多维数组转换为文件路径。我有这个数组:
$data = [
"users" => [
"joe" => [
"photos" => ["a.jpg","b.jpg"],
"files" => ["a.doc","b.doc"]
],
"annie" => [
"photos" => ["a.jpg","b.jpg"],
"files" => ["a.doc","b.doc"]
],
]
];
我必须转换为路径示例:
"users/joe/photos/a.jpg";
"users/joe/photos/b.jpg";
"users/joe/files/a.doc";
"users/joe/files/b.doc";
"users/annie/photos/a.jpg";
"users/annie/photos/b.jpg";
"users/annie/files/a.doc";
"users/annie/files/b.doc";
但我不能用这个功能得到最好的结果:
$path = "";
function iterate($data, $path)
{
echo "<br>";
foreach ($data as $key => $item){
if (is_array($item)){
$path .= $key.DIRECTORY_SEPARATOR;
iterate($item, $path);
}else{
echo $path.$item."<br>";
}
}
}
输出 :
users/joe/photos/a.jpg
users/joe/photos/b.jpg
users/joe/photos/files/a.doc
users/joe/photos/files/b.doc
users/joe/annie/photos/a.jpg
users/joe/annie/photos/b.jpg
users/joe/annie/photos/files/a.doc
users/joe/annie/photos/files/b.doc
请帮忙。
谢谢
解决方案
您可以使用RecursiveIteratorIterator
+ RecursiveArrayIterator
:
function computeFilePaths(array $fileTree): array
{
$filePaths = [];
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($fileTree));
foreach ($iterator as $fileName) {
for ($folders = [], $pos = 0, $depth = $iterator->getDepth(); $pos < $depth; $pos++) {
$folders[] = $iterator->getSubIterator($pos)->key();
}
$filePaths[] = implode('/', $folders) . '/' . $fileName;
}
return $filePaths;
}
print_r(computeFilePaths($yourArrayGoesHere));
我强烈建议选择这个问题的答案来了解这些迭代器是如何工作的。
推荐阅读
- php - 如果选中了父类别,则不要回显子类别
- java - 整数数组的问题
- r - Interpolating data only between first and last observation in R
- javascript - 页面重新加载时从 url 中删除参数
- php - php 中定期付款的 PayPal 订阅
- dart - Is there a function in dart to remove substring with pattern?
- python - How to use the same layer/model twice in one model in Keras?
- react-native - 如何选择文本文件并将文件内容读取到字符串 React Native
- oracle - 页面加载期间 OAF 中的问题
- google-apps-script - Gmail 插件将参数传递给卡片操作触发的功能