问题描述
|
我有一个从目录创建收集文件并将其放入数组的函数。
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;
}
我想解决的问题是效率。每次我运行ѭ1时,它都会重新组装数组。我有点陷入静态变量,并没有任何进展的isset条件。最好在像$filesArray = getFiles(\"folder\");
这样的变量内调用该函数并重用$filesArray
。
他们有办法只设置一次数组而不继续使用opendir吗?
我可以对上述功能进行任何修改吗? (//有条件吗?)
提前致谢!
解决方法
在函数中定义静态变量会使该变量在多次调用此函数时保持其值。
因此,您可以这样做:
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;
}
如果您在同一文件夹上多次运行此功能,则字符串“ doing the job \”将仅在第一次出现。
不要忘记删除echo语句;)
,如果该值变化不大(脚本运行时没有添加更多文件)并且您遇到性能问题,那么将结果放入数组中是个好主意。
如果在运行脚本时数据发生变化,则需要重新运行它以获取新信息。
但是,如果您没有看到性能问题,那么这可能只是过早的优化,您的时间可能会花在其他地方。
但是将值缓存在变量中是一个简单的解决方案,应该可以解决您的问题。