Php 一种优雅的排序、唯一和消除阵列中重复项的方法

Php 一种优雅的排序、唯一和消除阵列中重复项的方法,php,arrays,sorting,Php,Arrays,Sorting,当然,我可以对数组进行排序sort(),消除重复的array\u unique(),并消除空白array\u filter()。我可以在三行中完成,然后对我必须处理的十个数组重复这三行 但我希望它至少稍微优雅一点,所以我尝试将这三种操作结合起来。它在前两种情况下确实有效,然后我将其推得太远,并应用了sort() 这产生了: 严格标准:只能通过引用传递变量 那么,实现这个阵列处理目标最优雅的方式是什么呢 帮助我理解失败原因的额外积分。作为概念证明,您可以避免在变量之间创建变量和改变原始数组。看一看

当然,我可以对数组进行排序
sort()
,消除重复的
array\u unique()
,并消除空白
array\u filter()
。我可以在三行中完成,然后对我必须处理的十个数组重复这三行

但我希望它至少稍微优雅一点,所以我尝试将这三种操作结合起来。它在前两种情况下确实有效,然后我将其推得太远,并应用了sort()

这产生了:

严格标准:只能通过引用传递变量

那么,实现这个阵列处理目标最优雅的方式是什么呢


帮助我理解失败原因的额外积分。

作为概念证明,您可以避免在变量之间创建变量和改变原始数组。看一看。您可以使用此类进行不可变排序:

$testArray = iterator_to_array(array_reduce(
    array_filter(array_unique($testArray)),
    function ($heap, $element) {
        $heap->insert($element);
        return $heap;
    },
    new SplMinHeap
));

这是。

您的代码
$testArray=sort(数组\过滤器(数组\唯一($testArray))无法正常工作:

  • sort()
    返回的值是
    TRUE
    FALSE
    。不是您期望的数组
  • sort()
    接收数组参数的元素将排列在数组本身上。所以它需要一个实际的数组来处理它;不是其他函数的重新返回值,它实际上不作为变量存在。这就是错误的原因 在

  • 知道这一点,并在PHP中牢记这一点。修复错误的第一种方法可能是:

    sort($testArray = array_filter(array_unique($testArray)));
    
    ……但这也行不通。赋值返回$testArray的值,而不是$testArray本身。和以前一样的问题

    在这一点上,最简单的解决方法是避免不必要的开销:使用两行代码而不是一行

    $testArray = array_filter(array_unique($testArray));
    sort($testArray);
    

    测试它。

    创建一个调用这三个函数的函数,并在您需要的所有数组上调用您的函数?@Jan Hančič-是的,这可以工作,我想对于如此简单的事情,这似乎是一件令人惊奇的事情?我有点想知道是否已经有一个内置函数可以做到这一点?sort函数通过引用获取数组
    bool sort(array&$array[,int$sort\u flags=sort\u REGULAR])
    ,所以它不能在严格模式下工作。问题是,为什么一开始就有这么多不同的数组,这似乎是一个设计问题。这就是为什么它不在那里。至于它失败的原因<代码>排序
    函数执行就地排序,这意味着它会变异变量,而不是创建新的变量。没有命名变量排序将是无用的,因为您将无法访问结果。除了概念证明之外,它作为一个函数工作得非常完美,并且解决了我的问题,这只是内部代码,所以非常感谢!超级有趣的方法!
    $testArray = array_filter(array_unique($testArray));
    sort($testArray);