Невозможно вернуть массив, несколько массивов в одной переменной в PHP
ПОСТАНОВКА ЗАДАЧИ
У меня есть 1000 файлов, хранящихся в структуре папок в следующем формате
<root_directory>/year/month/day/category/file.ext
На основе определенных параметров мне нужно выбрать одну или несколько папок верхнего уровня и сжать все или выбранные файлы из нее в один zip-файл на ходу и предоставить его пользователю для загрузки. Теперь чтобы сжать все эти файлы я использую метод показанный в решении этого вопроса на StackOverflow Загрузите несколько файлов в виде zip-файла с помощью php - Stack Overflow[^] .
этот метод требует массива, имеющего полный путь к файлам, которые нужно сжать, и вот где я застрял.
СИТУАЦИЯ
Это довольно странно, с чем я сейчас сталкиваюсь. У меня есть функция, которая возвращает массив всех файлов в предоставленной папке и ее подпапке. Теперь проблема в том, когда я есть print_r($ОБР) внутри функции, где $прибытие имеет все данные он показывает мне данные но когда я назначаю эти данные переменной вызывающей функции и print_r($переменная) это пустой массив();
Я копнул глубже и заметил, что $variable имеет несколько массивов, назначенных в нем, возможно, потому, что он рекурсивен.
Позвольте мне привести несколько примеров кода...
<?php $arrGlobal = array(); // global variable function listFolderFiles($dir) { $ffs = scandir($dir); $arr = array(); unset($ffs[array_search('.', $ffs, true)]); unset($ffs[array_search('..', $ffs, true)]); if (count($ffs) < 1) return; foreach($ffs as $ff){ if(is_dir($dir.DIRECTORY_SEPARATOR.$ff)) { listFolderFiles($dir.DIRECTORY_SEPARATOR.$ff); } else { array_push($arr, $dir.DIRECTORY_SEPARATOR.$ff); // array_push($GLOBALS['arrGlobal'], $dir.DIRECTORY_SEPARATOR.$ff); } } print_r($arr); // here it returns me data // $count = count($arr) // count the number of elements in the array return $arr; } $variable = listFolderFiles("<path of directory>"); print_r($variable); // here it says Array() i.e. an empty array ?>
теперь я внимательно наблюдал за выходом print_r($ОБР); это что-то вроде этого
Array ( [0] => <path_to_file> [1] => <path_to_file> [2] => <path_to_file> ) Array ( [0] => <path_to_file> [1] => <path_to_file> ) Array ( [0] => <path_to_file> [1] => <path_to_file> [2] => <path_to_file> ) Array ( [0] => <path_to_file> [1] => <path_to_file> [2] => <path_to_file> [3] => <path_to_file> )
ясно, что вы можете видеть, что эта переменная имеет в себе 4 массива, и это не повторяющиеся данные, так как каждый массив имеет разные элементы и разное количество элементов в них. Я также пробовал работать с глобальной переменной $arrGlobal но результат тот же. когда я подсчитываю длину массива (), он дает мне разные длины следующим образом
$count = count($arr) echo $count; // OUTPUT 3234
Я думал, что это массив массива, поэтому я попробовал print_r($arr[0]) и это дало мне предупреждение.
<path_to_file><path_to_file><path_to_file><path_to_file> Notice: Undefined offset: 0 in C:\xampp\htdocs\whoistest\api\index.php on line 314
Что я уже пробовал:
Надеюсь, я все здесь описал. Я предполагаю, что поскольку функция рекурсивна, то эта проблема возникает. Пожалуйста, помогите мне решить эту проблему как можно скорее.