#php
#php
Вопрос:
Как мне рекурсивно получить доступ ко всем файлам json?
Приведенный ниже код находит все файлы json в одном каталоге и объединяет их в один файл. Теперь у меня есть иерархическая структура папок, как мне адаптировать следующее, чтобы перебирать все каталоги в корневом каталоге json/bones
?
<?php
$files = glob("json/bones/*.json");
//Create an empty new array
$newDataArray = [];
//Get the contents of each file
foreach($files as $file){
$thisData = file_get_contents($file);
//Decode the json
$thisDataArray = json_decode($thisData);
//Add $thisData to the new array
$newDataArray[] = $thisDataArray;
}
//Encode the array to JSON
$newDataJSON = json_encode($newDataArray);
file_put_contents("json/data.json",$newDataJSON);
?>
редактировать — новый код:
<?php
$directory = ("json/data/")
$scan_dir = scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] ) : array;
//Create an empty new array
$newDataArray = [];
//Get the contents of each file
// foreach($files as $file){
foreach($scan_dir as $file){
$thisData = file_get_contents($file);
//Decode the json
$thisDataArray = json_decode($thisData);
//Add $thisData to the new array
$newDataArray[] = $thisDataArray;
}
//Encode the array to JSON
$newDataJSON = json_encode($newDataArray);
file_put_contents("json/data.json",$newDataJSON);
?>
Дальнейшее редактирование:
Теперь это выдает ошибку разрешений file_get_contents(.): failed to open stream: Permission denied
, с которой раньше проблем не было.
<?php
$dir = "../../json/data/";
echo "<p>directory: ".$dir."</p>";
$files = scandir($dir);
//Create an empty new array
$newDataArray = [];
//Get the contents of each file
// foreach($files as $file){
foreach($files as $file){
$thisData = file_get_contents($file);
//Decode the json
$thisDataArray = json_decode($thisData);
//Add $thisData to the new array
$newDataArray[] = $thisDataArray;
}
//Encode the array to JSON
$newDataJSON = json_encode($newDataArray);
file_put_contents("data.json",$newDataJSON);
?>
Комментарии:
1. рекурсивная выборка всех файлов — источник: php.net это может быть полезно.
2. Итак, чтобы получить массив путей к файлам: $directory = («json/bones/») $scan_dir = scandir ( строка $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, ресурс $context ]] ) : массив
3. Тогда я бы
foreach($scan_dir as $file){
забрал все файлы, тогда мне пришлось бы добавить фильтр?4. Я получаю
Parse error: syntax error, unexpected '$scan_dir' (T_VARIABLE) in G:Driveserversxampphtdocsbonifybonify2_0_2appsettingseditget_json.php on line 5
, я добавлю новый код в редактирование.5. Используйте RecursiveDirectoryIterator, предоставляемый spl php.net/manual/en/class.recursivedirectoryiterator.php#97228
Ответ №1:
Это сделало свое дело
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('../../json/data/'));
$files = array();
foreach ($rii as $file) {
if ($file->isDir()){
continue;
}
$files[] = $file->getPathname();
}
var_dump($files);
// $dir = "../../json/data/";
// echo "<p>directory: ".$dir."</p>";
// $files = scandir($dir);
//Create an empty new array
$newDataArray = [];
//Get the contents of each file
// foreach($files as $file){
foreach($files as $file){
$thisData = file_get_contents($file);
//Decode the json
$thisDataArray = json_decode($thisData);
//Add $thisData to the new array
$newDataArray[] = $thisDataArray;
}
//Encode the array to JSON
$newDataJSON = json_encode($newDataArray);
file_put_contents("gfgdata.json",$newDataJSON);