Карта каталогов в CodeIgniter-не работает с целыми числами в качестве имен каталогов
При использовании помощника directory_map в CodeIgniter я не могу получить имена каталогов, если они являются прямым целым числом. Например, "2013" не будет работать. Но "2013_test" будет работать.
Пример print_r, который у меня есть, приведен ниже. Как и строка кода для directory_map
Есть ли исправление для этого?
Массив ( [0] => массив ( )
[1] => Array
(
)
[2] => Array
(
)
[3] => Array
(
)
[4] => Array
(
)
[5] => Array
(
)
[6] => Array
(
)
[7] => Array
(
[0] => 2010.pdf
)
[8] => Array
(
[0] => 2011.pdf
[1] => 2011.xls
)
[9] => Array
(
[0] => 2012.pdf
[1] => 2012.xls
)
)
$publication_data = dir_map_sort (directory_map ($pre_string.$строка URI."/", 2));
1 ответ:
Мне удалось решить эту проблему. Вам необходимо изменить функцию directory_map в файле array_helper. Я четко прокомментировал в начале и в конце кода, который я добавил.
if ( ! function_exists('directory_map')) { function directory_map($source_dir, $directory_depth = 0, $hidden = FALSE) { if ($fp = @opendir($source_dir)) { $filedata = array(); $new_depth = $directory_depth - 1; $source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; while (FALSE !== ($file = readdir($fp))) { // Remove '.', '..', and hidden files [optional] if ( ! trim($file, '.') OR ($hidden == FALSE && $file[0] == '.')) { continue; } if (($directory_depth < 1 OR $new_depth > 0) && @is_dir($source_dir.$file)) { //code added - mike lovely (it's just this if/else below) if(($file >= "1970") && ($file <= "2300")) { $file_1 = "_".$file; }else{ $file_1 = $file; } //end - mike lovely $filedata[$file_1] = directory_map($source_dir.$file.DIRECTORY_SEPARATOR, $new_depth, $hidden); } else { $filedata[] = $file; } } closedir($fp); return $filedata; } return FALSE; } }
В начале имени массива будет стоять символ подчеркивания.
Я объединил это с ltrim ($array_name,"_") в моей модели, чтобы снять его перед передачей обратно контроллеру.
Надеюсь, это поможет.