繁体   English   中英

array_unique()没有排序

[英]array_unique() without sorting

我正在构建一个扩展include_path的自动加载器。 它需要一个数组,附加explode()d include路径,删除对当前目录的所有引用,在数组的开头添加一个当前目录,最后将整个join()连接在一起以形成一个新的包含路径。 代码如下所示

<?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);
}
?>

我想在对数组进行imploding之前在数组上使用array_unique(),这样如果有人不小心并多次指定相同的路径,PHP就不会多次在同一个地方查找。 但是,我还需要维护数组的排序顺序,因为include包含在include路径中定义的顺序。 我想首先查看当前目录,然后查看我的搜索目录列表,最后查看原始包含路径,以便例如默认include_path中的旧版本公共库不包含在更新版本中在我的搜索列表中。

由于这些原因,我无法使用array_unique(),因为它对数组的内容进行排序。

有没有办法让array_unique保持我的数组中的元素的顺序?

不直接使用array_unique(); 但是array_unique会保留密钥,因此您可以在之后执行ksort()以重新创建条目的原始顺序

你也可以使用array_count_value。 您将获得功能结果键的唯一数组结果

它不会破坏您的数组排序内容。

参考: http//php.net/manual/en/function.array-count-values.php

就像是:

$temp = array();

foreach ( $original_array as $value ) {
    $temp[$value] = 1;
}

$original_array = array_keys($temp);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM