在php中包含目录的所有php文件的问题

时间:2011-03-18 21:47:46

标签: php arrays

我包含了目录的所有php文件,并且工作得很好

  foreach (glob("directory/*.php") as $ScanAllFiles)
  {
      include_once($ScanAllFiles); 
  }

但问题是这些文件的内容都是这样的

$workers = array(
blah,
blah
);


$employers = array(
blah,
blah
);

现在,当我包含所有这些文件时,它有些无意义,因为我将重复$ worker和$ employer

我希望他们像这样

$workers = array()
$workers .=array()

现在有没有在没有编辑所有php文件的情况下获取$ vars?

3 个答案:

答案 0 :(得分:4)

您必须使用array_merge()函数自行合并数组:

$all_workers = array();
foreach (glob("directory/*.php") as $ScanAllFiles) {
    $workers = array();     // So if there is no $workers array in the current file,
                            // there will be no risk of merging anything twice
                            // => At worse, you'll merge an empty array (i.e. nothing) into $all_workers
    include $ScanAllFiles;
    $all_workers = array_merge($all_workers, $workers);
}


PHP不会自动执行此操作:基本上,包括一个文件就像在您放置include语句的行中将其整个内容复制粘贴一样。

答案 1 :(得分:1)

一个选项可能是在函数中包含这些文件,以便您使用范围变量而不是全局变量。

$employees = array();

foreach (glob("directory/*.php") as $ScanAllFiles)
{
    $employees = array_merge(my_include($ScanAllFiles), $employees);
}

function my_include($file) {

    include_once($file);

    return $employees;
} 

答案 2 :(得分:0)

在这种情况下,最好重写特定的脚本。一个不太可读但功能正常的方法是:

$workers = (array)$workers + array(
     blah,
     blah,
);

虽然+方法并非总是最好,但最好使用array_merge