Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多维数组转换为文件路径_Php_File_Multidimensional Array - Fatal编程技术网

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));