我有排序爲陣列如下:雙分選陣列用PHP
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
值y排序:
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");
現在被正確分類爲Y及其功能sortByY,但我仍然面臨着同樣的問題:還分揀X ...
這是我從收到迴音:
[{"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 ...
[rsort()](http://www.php.net/manual/en/function.rsort.php)沒有按」不要回調參數;也許你打算使用[usort()](http://www.php.net/manual/en/function.usort.php)代替 –
並回答你的問題,替換'} else { return 0;' 'else else if($ a-> x> $ b-> z){return -1; } else if($ a-> x < $b-> z){return -1; } else {return 0; }' –
完全正確@MarkBaker! – Alvaro