我正在构建一个扩展 include_path 的自动加载器。它接受一个数组,将 explode() 函数的结果追加到 include path 中,移除所有对当前目录的引用,将单个当前目录添加到数组开头,最后使用 join() 函数将整个数组拼接起来形成新的 include path。以下是代码:
<?php
static public function extendIncludePath (array $paths)
{
// Build a list of the current and new paths
$pathList = array_merge (explode (PATH_SEPARATOR, $paths), explode (PATH_SEPARATOR, get_include_path ()));
// Remove any references to the current directory from the path list
while ($key = array_search ('.', $pathList))
{
unset ($pathList [$key]);
}
// Put a current directory reference to the front of the path
array_unshift ($pathList, '.');
// Generate the new path list
$newPath = implode (PATH_SEPARATOR, $pathList);
if ($oldPath = set_include_path ($newPath))
{
self::$oldPaths [] = $oldPath;
}
return ($oldPath);
}
?>
我想在将数组合并之前使用array_unique(),这样如果有人粗心地多次指定相同的路径,PHP就不会多次查找同一位置。但是,我还需要保持数组的排序顺序,因为include按照包含路径的定义顺序查找目录。我希望首先查找当前目录,然后是搜索目录列表,最后才是原始的包含路径,以便例如在我的搜索列表中优先选择较新版本的公共库,而不是默认包含路径中的旧版本。
由于这些原因,我不能使用array_unique(),因为它会对数组内容进行排序。
是否有办法让array_unique()保留数组元素的顺序?
$array = array_flip(array_flip($array))
对你来说是一个选项?(array_flip
交换数组中的键和值,由于键始终是唯一的,双重array_flip
可以使数组中的值唯一。) - pinkgothic