我想在php中按与值相反的顺序对数组进行排序
我想按值的相反顺序对数组进行排序。我使用了arsort php函数,但结果对我不好 例如: 我想对下一个数组进行排序:我想在php中按与值相反的顺序对数组进行排序,php,arrays,Php,Arrays,我想按值的相反顺序对数组进行排序。我使用了arsort php函数,但结果对我不好 例如: 我想对下一个数组进行排序: myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2); $myArray = array( "d" => 1, "Mircea Anca" => 2, "b" => 3, "Iuliana Moise" => 2,
myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
$myArray = array(
"d" => 1, "Mircea Anca" => 2,
"b" => 3, "Iuliana Moise" => 2,
"c" => 4, "Florina Popescu" => 2 )
使用arsort php函数后,结果是:
myArray =array ( "c" => 4, "b" => 3, "e" => 2, "f" => 2, "d" => 1 );
这是不好的,因为arsort函数没有保持数组中元素的初始顺序
我想要的结果是:
myArray =array ( "c" => 4, "b" => 3, "f" => 2, "e" => 2, "d" => 1 );
f在e顺序之前,类似于原始数组。具有相同值的键不能反转。
谢谢。编辑:
这在内置函数中是不可行的,您需要实现自己的排序解决方案。你可以按照这个来理解更多
这些解决方案能够奏效,这是巧合:
$myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
uasort($myArray, function($a, $b){
if($a == $b)
return 1;
else
return $b - $a;
});
print_r($myArray);
或
$myArray=array(“d”=>1,“f”=>2,“b”=>3,“c”=>4,“e”=>2);
uasort($myArray,function($a,$b){
返回$a请尝试此选项
arsort($array, krsort($array));
我认为最好的选择是使用uasort php函数。
在您的案例中使用uasort的优点是,您可以更改定义自己的排序算法,而不必与php asort比较方法绑定
必须定义一个回调函数来计算第一个值是否小于、大于或等于第二个值
您必须查看php官方在线文档以了解此函数的功能,但我认为很容易掌握,因此我将为您的问题留下自己的解决方案
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? 1 : -1;
}
函数cmp($a,$b){
如果($a=$b){
返回0;
}
回报($a<$b)?1:-1;
}
使用此回调函数,可以执行反向排序,同时在键具有相同值时保持键的原始顺序
最好的,
Demian一种简便易行的方法是:
<?php $a = array_flip($a); ksort($a); $a = array_flip($a); ?>
数组翻转翻转每个键值
按“现在键”对数组排序
数组\再次翻转以获得前一个星座和按值排序的数组
--附言:--
为什么这么复杂?@others.下一个数组似乎没有正确的响应:
myArray = array("d" => 1, "f" => 2, "b" => 3, "c" => 4, "e" => 2);
$myArray = array(
"d" => 1, "Mircea Anca" => 2,
"b" => 3, "Iuliana Moise" => 2,
"c" => 4, "Florina Popescu" => 2 )
这对我有用
由于asort和arsort函数似乎通过降序键值对具有相同值的行进行排序,因此如果值相等,arsort将“切换”较低的键值和较高的键值
我的解决方案是从低到高排序(asort),这仍然会执行不需要的行翻转,然后反转数组,将具有相同值的行移回其正确的各自位置
源:数组([0]=>1[1]=>0.5[2]=>2[3]=>3[4]=>0.5)
排序:数组([4]=>0.5[1]=>0.5[0]=>1[2]=>2[3]=>3)-注意,相同值行的键值被翻转
反转:数组([3]=>3[2]=>2[0]=>1[1]=>0.5[4]=>0.5)-现在您对数组进行了反转排序,并为具有相同值的行保持了键完整性
$array=array(1,.5,2,3,.5);
asort($array);
$array=array_reverse($array,TRUE);
非常不寻常的任务,我无法想象这样做的合理原因。但是,您可以始终使用usort()要实现任意类型的排序算法sort@Sharpnel.usort的主要问题是在最终产品中丢失了密钥。在定义自己的排序函数时,必须使用uasort保留密钥。请查看官方documentation@Col.你又来了?:)我希望看到您使用uasort
编写的解决方案。请告诉我们arsort()
的第二个参数必须是二进制标志,而不是布尔值(无论类型转换如何)。执行krsort()有何意义
?这绝对不会满足OP的要求;这将首先对键进行排序,OP希望避免对值相等的键进行排序。请参阅我的答案。了解为什么这种类型的响应不起作用。