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