我有一个函数可以从目录创建一个收集文件并将它们放入一个数组中。
function getFiles($folder){
$ignore = array("index.php",".","..","favicon.gif","favicon.ico",".DS_Store");
$gottenFiles = array();
if ($handle = opendir($folder)) {
while (false !== ($file = readdir($handle))) {
if (in_array($file, $ignore)){
//do nothing
}else{
array_push($gottenFiles, $file);
}
}
closedir($handle);
}
return $gottenFiles;
}
我试图解决的问题是效率问题。 每次我运行 getFiles("folder");
它会在重组数组的整个过程中运行。我涉及静态变量并且没有进展的isset条件。在这个$filesArray = getFiles("folder");
之类的变量中调用函数并重用$filesArray
会更好吗?
他们是一种设置数组而不是继续使用opendir的方法吗?
我可以对上述功能进行任何修改吗? (//什么都不做?)
提前致谢!
答案 0 :(得分:3)
如果值不会发生太大变化(在脚本运行时没有添加更多文件)并且您遇到了性能问题,那么将结果放在数组中是一个非常好的主意。
如果您在运行脚本时数据发生变化,则需要重新运行以获取新信息。
但是,如果你没有看到性能问题,那么这可能只是一个不成熟的优化,你的时间会更好地花在其他地方。
但是在变量中缓存值是一个简单的解决方案,应该可以解决您的问题。
答案 1 :(得分:2)
在函数中定义一个静态变量将使该变量在多次调用此函数时保持其值。
所以,你可以这样做:
function getFiles($folder)
{
static $cache = array();
if (isset($cache[$folder]))
{
return $cache[$folder];
}
$ignore = array("index.php",".","..","favicon.gif","favicon.ico",".DS_Store");
echo "doing the job\n"; // Don't forget to remove
$gottenFiles = array();
if ($handle = opendir($folder))
{
while (false !== ($file = readdir($handle)))
{
if (in_array($file, $ignore))
{
//do nothing
}
else
{
array_push($gottenFiles, $file);
}
}
closedir($handle);
}
$cache[$folder] = $gottenFiles;
return $gottenFiles;
}
如果您在同一文件夹上多次运行此功能,则“执行该作业”字符串将仅在第一次显示。 不要忘记删除echo语句;)