Карта каталогов в 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 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,"_") в моей модели, чтобы снять его перед передачей обратно контроллеру.

Надеюсь, это поможет.