Php 将多维数组转换为文件路径
如何将多维数组转换为文件路径。 我有这个阵列:Php 将多维数组转换为文件路径,php,file,multidimensional-array,Php,File,Multidimensional Array,如何将多维数组转换为文件路径。 我有这个阵列: $data = [ "users" => [ "joe" => [ "photos" => ["a.jpg","b.jpg"], "files" => ["
$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>";
}
}
}
请帮忙
谢谢您可以使用+:
函数ComputeFilePath(数组$fileTree):数组
{
$filepath=[];
$iterator=new recursiveiterator(new recursivearrayiiterator($fileTree));
foreach($iterator作为$fileName){
对于($folders=[],$pos=0,$depth=$iterator->getDepth();$pos<$depth;$pos++){
$folders[]=$iterator->getSubIterator($pos)->key();
}
$FilePath[]=内爆(“/”,$folders)。“/”。$fileName;
}
返回$filepath;
}
打印(ComputeFilePath($YourArrayGoesher));
我强烈建议您选择的答案来理解这些迭代器是如何工作的。您可以使用+:
函数ComputeFilePath(数组$fileTree):数组
{
$filepath=[];
$iterator=new recursiveiterator(new recursivearrayiiterator($fileTree));
foreach($iterator作为$fileName){
对于($folders=[],$pos=0,$depth=$iterator->getDepth();$pos<$depth;$pos++){
$folders[]=$iterator->getSubIterator($pos)->key();
}
$FilePath[]=内爆(“/”,$folders)。“/”。$fileName;
}
返回$filepath;
}
打印(ComputeFilePath($YourArrayGoesher));
我强烈建议您选择的答案来理解这些迭代器是如何工作的
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
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));