2

在 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));

4

1 回答 1

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,"_") 结合起来,在将其传递回控制器之前将其取下。

希望这可以帮助。

于 2013-07-18T13:01:20.423 回答