CodeIgniter中的目录映射 - 不使用整数作为目录名称

时间:2013-07-10 13:50:15

标签: php codeigniter directory helper

在CodeIgniter中使用directory_map Helper时,如果它们是直整数,我将无法获取目录名称。例如“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_string。“/”,2));

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。您必须修改array_helper文件中的directory_map函数。我已经清楚地评论了我添加的代码的开头和结尾。

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,“_”)结合起来,然后在将其传回控制器之前将其取回。

希望这有帮助。