Php 带重新排列索引的反向排序数组
所以现在我遇到了一个问题,我有一个像这样的数组设置Php 带重新排列索引的反向排序数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,所以现在我遇到了一个问题,我有一个像这样的数组设置 array(8) { [0]=> array(2) { [0]=> float(2.1166666666667) [1]=> string(7) "9434493" } [1]=> array(2) { [0]=> float(2.07) [1]=> string(7) "8591971" }
array(8) {
[0]=> array(2) {
[0]=> float(2.1166666666667)
[1]=> string(7) "9434493"
}
[1]=> array(2) {
[0]=> float(2.07)
[1]=> string(7) "8591971"
}
[2]=> array(2) {
[0]=> float(2.0566666666667)
[1]=> string(8) "17015102"
}
[3]=> array(2) {
[0]=> float(2.0366666666667)
[1]=> string(7) "9637191"
}
[4]=> array(2) {
[0]=> float(2.015)
[1]=> string(8) "11405473"
}
[5]=> array(2) {
[0]=> float(1.9833333333333)
[1]=> string(8) "28233403"
}
[6]=> array(2) {
[0]=> float(2.0366666666667)
[1]=> string(8) "14248330"
}
[7]=> array(2) {
[0]=> float(2.0933333333333)
[1]=> string(8) "14987165"
}
}
在我使用函数arsort()
之后,它看起来如下所示:
array(8) {
[0]=> array(2) {
[0]=> float(2.1166666666667)
[1]=> string(7) "9434493"
}
[7]=> array(2) {
[0]=> float(2.0933333333333)
[1]=> string(8) "14987165"
}
[1]=> array(2) {
[0]=> float(2.07)
[1]=> string(7) "8591971"
}
[2]=> array(2) {
[0]=> float(2.0566666666667)
[1]=> string(8) "17015102"
}
[6]=> array(2) {
[0]=> float(2.0366666666667)
[1]=> string(8) "14248330"
}
[3]=> array(2) {
[0]=> float(2.0366666666667)
[1]=> string(7) "9637191"
}
[4]=> array(2) {
[0]=> float(2.015)
[1]=> string(8) "11405473"
}
[5]=> array(2) {
[0]=> float(1.9833333333333)
[1]=> string(8) "28233403"
}
}
所以我的数组是按[0]索引的值排序的。但是
当我试着这样循环时
$x = 0;
while ($x < count($sorted_array)) {
$sorted_array[$x][0];
$x++;
}
$x=0;
而($x
它一直在打印原始数组顺序。然后我意识到,当我使用函数arsort()
时,它保持了索引的原始顺序,因此它以原始数组顺序打印
有没有一个函数可以解决这个问题,这样我就可以用索引来循环它?任何帮助都将不胜感激。非常适合这里
按相反顺序对数组排序
此函数不维护索引关联快速查看PHP文档表明,
rsort()
当您使用arsort()
时,会保留关键点
因为您正在使用$x
进行迭代,所以实际上忽略了排序调用
对循环使用rsort()
或者在调用arsort()
后使用foreach()
循环
或者最好是调用array\u column()
,而不是循环
以下是一些演示:()
foreach()
loopUsersort
函数,而不是arsort
,如果您不想用值保留索引位置。我将使用以下方法之一。我会告诉你事情的进展。
$array=$copy=[
[2.1166666666667,9434493],
[2.07,8591971],
[2.0566666666667,17015102],
[2.0366666666667,9637191],
[2.015,11405473],
[1.9833333333333,28233403],
[2.0366666666667,14248330],
[2.0933333333333,14987165]
];
arsort($array);
var_export(array_column($array,0)); // <-- you lose the keys you preserved
echo "\n---\n";
foreach($array as $index=>$row){ // <-- you keep the keys you preserved
echo "$index : {$row[0]}\n";
}
echo "\n---\n";
rsort($copy); // you don't preserve the keys
for($x=0, $count=sizeof($copy); $x<$count; ++$x){ // you should cache the count instead of calling count() on every iteration
echo "$x : {$copy[$x][0]}\n";
}
array (
0 => 2.1166666666667,
1 => 2.0933333333333,
2 => 2.07,
3 => 2.0566666666667,
4 => 2.0366666666667,
5 => 2.0366666666667,
6 => 2.015,
7 => 1.9833333333333,
)
---
0 : 2.1166666666667
7 : 2.0933333333333
1 : 2.07
2 : 2.0566666666667
6 : 2.0366666666667
3 : 2.0366666666667
4 : 2.015
5 : 1.9833333333333
---
0 : 2.1166666666667
1 : 2.0933333333333
2 : 2.07
3 : 2.0566666666667
4 : 2.0366666666667
5 : 2.0366666666667
6 : 2.015
7 : 1.9833333333333