我有一个数组排序如下:
Array (
[0] => Array (
[x] => 0
[y] => 1
)
[1] => Array (
[x] => 210
[y] => 1
)
[2] => Array (
[x] => 440
[y] => 1
)
[3] => Array (
[x] => 210
[y] => 2
)
[4] => Array (
[x] => 0
[y] => 2
)
)
我已经使用rsort
rsort($packagesinf, 'my_sortY');
print_r($packagesinf);
function my_sortY($a, $b)
{
if ($a->y> $b->y) {
return -1;
} else if ($a->y< $b->y) {
return 1;
} else {
return 0;
}
}
我会按每个不同的Y排序,X值按升序排列。就我而言,它将是:[0]>[1]>[2]>[4]>[3]
。
你知道怎么做,考虑到优先级先是Y然后是X?
编辑:所以现在我根据提出的解决方案修改了代码:
function my_sortYX($a, $b)
{
if ($a->y > $b->y) {
return 1;
} else if ($a->y < $b->y) {
return -1;
} else {
if ($a->x > $b->x) {
return 1;
} else if ($a->x < $b->x) {
return -1;
} else {
return 0;
}
}
}
function sortByY($a, $b) {
return $a['y'] - $b['y'];
}
echo json_encode($packagesinf);
echo nl2br("\n");
echo nl2br("\n");
echo 'my_sortYX';
echo nl2br("\n");
usort($packagesinf, 'my_sortYX');
echo json_encode($packagesinf);
echo nl2br("\n");
echo nl2br("\n");
echo 'sortByY';
echo nl2br("\n");
usort($packagesinf, 'sortByY');
echo json_encode($packagesinf);
echo nl2br("\n");
echo nl2br("\n");
现在正在使用sortByY函数对Y进行正确排序,但是我仍然面临同样的排序问题...
这是我从回声中得到的:
[{"x":0,"y":1},{"x":210,"y":1},{"x":440,"y":1},{"x":210,"y":2},{"x":0,"y":2},{"x":30,"y":3},{"x":420,"y":1}]
my_sortYX
[{"x":30,"y":3},{"x":420,"y":1},{"x":0,"y":2},{"x":210,"y":2},{"x":210,"y":1},{"x":440,"y":1},{"x":0,"y":1}]
sortByY
[{"x":440,"y":1},{"x":0,"y":1},{"x":420,"y":1},{"x":210,"y":1},{"x":210,"y":2},{"x":0,"y":2},{"x":30,"y":3}]
所以my_sortYX仍然无法正常工作,只有sortByY ......
答案 0 :(得分:1)
你试过这个吗?
function my_sortYX($a, $b)
{
if ($a->y > $b->y) {
return -1;
} else if ($a->y < $b->y) {
return 1;
} else {
if ($a->x > $b->x) {
return -1;
} else if ($a->x < $b->x) {
return 1;
} else {
return 0;
}
}
}
编辑1 固定的返回值标志
编辑2 修复了组件引用:将$a->x
替换为$a[x]
等。
function my_sortYX($a, $b)
{
if ($a[y] > $b[y]) {
return 1;
} else if ($a[y] < $b[y]) {
return -1;
} else {
if ($a[x] > $b[x]) {
return 1;
} else if ($a[x] < $b[x]) {
return -1;
} else {
return 0;
}
}
}
编辑2 续
可能你可以删除所有else
- s,因为return
之后if-else
之后无法再继续执行......
function my_sortYX($a, $b)
{
if ($a[y] > $b[y])
return 1;
if ($a[y] < $b[y])
return -1;
if ($a[x] > $b[x])
return 1;
if ($a[x] < $b[x])
return -1;
return 0;
}
答案 1 :(得分:1)
正如Mark Baker所说,使用usort()代替rsort。
除此之外,以下代码应该有效(未经测试):
usort($packagesinf, 'my_sortY');
print_r($packagesinf);
function my_sortY($a, $b)
{
if ($a->y> $b->y) {
return -1;
} else if ($a->y< $b->y) {
return 1;
} else {
if ($a->x> $b->x) {
return -1;
} else if ($a->x< $b->x) {
return 1;
} else {
return 0;
}
}
}