@Qwerty_ABC

Как сгенерировать JSON директорию с файлами с получением рекурсивного пути?

Нужно сгенерировать JSON форму схожую с таким видом:
60e54ef87c677791434797.png
60e54f22c2019291655741.png
Получалось же у меня сделать такого типа:
60e54f5354e77314675450.png
Таким кодом:
<?php
 function get_filelist_as_array($dir, $recursive = true, $basedir = '') {
    if ($dir == '') {return array();} else {$results = array(); $subresults = array();}
    if (!is_dir($dir)) {$dir = dirname($dir);}
    if ($basedir == '') {$basedir = realpath($dir).DIRECTORY_SEPARATOR;}

    $files = scandir($dir);
    foreach ($files as $key => $value){
        if ( ($value != '.') && ($value != '..') ) {
            $path = realpath($dir.DIRECTORY_SEPARATOR.$value);
            if (is_dir($path)) {
                if ($recursive) {
                    $subdirresults = get_filelist_as_array($path,$recursive,$basedir);
                    $results = array_merge($results,$subdirresults);    
                }
            } else {$subresults[] = str_replace($basedir,'',$path); }
        }
    }
    if (count($subresults) > 0) {
        $results = array_merge($subresults,$results);
            foreach ($results as $key => $res){
				$time = time();
				$size = filesize($res);
                $hash = md5_file($res);
                $a[] = array("type" => "file", "name" => "$res", "data_change" => "$time", "size" => "$size", "hash" => "$hash"); 

            }
    }

   file_put_contents("update.json", json_encode(array('data'=>$a)));
   return $results;
}
$dir = 'C:\Users\Администратор\Desktop\FILES;
return get_filelist_as_array($dir);

Как я могу сгенерировать JSON файл с таким типом вывода директорий с файлами как на первом примере?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как-то так:
<?php

function tree($dirName) {
  $tree = [];
  $dir = opendir($dirName);
  while (($entry = readdir($dir)) !== false) {
    if ($entry === '.' || $entry === '..') {
      continue;
    }
    $fullName = "{$dirName}\\{$entry}";
    if (is_dir($fullName)) {
      $tree[] = [
        'name' => $entry,
        'type' => 'dir',
        'entries' => tree($fullName)
      ];
    } else {
      $tree[] = [
        'name' => $entry,
        'type' => 'file'
      ];
    }
  }
  return $tree;
}

print(json_encode(tree('C:\\test'), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

/* [
    {
        "name": "dir1",
        "type": "dir",
        "entries": [
            {
                "name": "dir2",
                "type": "dir",
                "entries": [
                    {
                        "name": "file5",
                        "type": "file"
                    }
                ]
            },
            {
                "name": "file1",
                "type": "file"
            },
            {
                "name": "file3",
                "type": "file"
            }
        ]
    },
    {
        "name": "file2",
        "type": "file"
    }
] */
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы