|
|
|
| Помогите отсортировать матрицу...знаю что школьная задача, но что то не получается (
есть массив вида:
A, B, C, D, 1
E, F, G, H, 0
I, J, K, L, 0
M, N, O, P 4
|
Нужно отсортировать строки таким образом чтобы последний столбец имел последовательность 4,1,0,0
т.е.
M, N, O, P 4
A, B, C, D, 1
E, F, G, H, 0
I, J, K, L, 0
|
т.е. по убыванию.... | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 11:50)
| | показывайте код, в котором не получается. | |
|
|
|
|
|
|
|
для: Trianon
(07.05.2007 в 11:54)
| |
<?php
for($i = 1; $i < count($listAllPoints); $i++) {
if($listAllPoints[$i][7] < $listAllPoints[$i-1][7]) {
$new[$i] = $listAllPoints[$i];
}
elseif ($listAllPoints[$i][7] == $listAllPoints[$i-1][7]) {
$new[$i] = $listAllPoints[$i];
}
}
?>
|
7 - номер столбца по которому сортируем | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 11:58)
| | ну что, кто нибудь может помочь? | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 11:58)
| | Не знаю, как он будет вести себя с цифрами...
<?php
function like ($a, $b)
{
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
foreach ($listAllPoints as $k=>$v)
usort ($listAllPoints, 'like');
?>
|
не проверял, сразу скажу | |
|
|
|
|
|
|
|
для: bronenos
(07.05.2007 в 12:20)
| | да,я читал мануал по этой функции....
пробовал так делать....я не очень понимаю ее логику....пока что не вышло | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 11:58)
| |
<?php
function my_cmp ($ra, $rb)
{
$a = $ra[count($ra)-1];
$b = $rb[count($rb)-1];
return ($a < $b) ? -1 : ($a > $b);
}
usort ($listAllPoints, 'my_cmp');
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(07.05.2007 в 12:28)
| | Тьфу блин.... совсем плохой стал....
<?php
function my_cmp ($ra, $rb) { return $ra[count($ra)-1] - $rb[count($rb)-1]; }
usort ($listAllPoints, 'my_cmp');
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(07.05.2007 в 12:31)
| | получаем 0,4,1,0 :( | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 12:58)
| | вот исходный массив:
Array
(
[0] => Array
(
[0] => 123
[1] => 0
[2] => 1
[3] => 0
[4] => 4
[5] => 5
[6] => 1
[7] => 0
[8] => 2
)
[1] => Array
(
[0] => test
[1] => 0
[2] => 0
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 4
)
[2] => Array
(
[0] => ypa
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 5
)
[3] => Array
(
[0] => 1
[1] => 1
[2] => 0
[3] => 1
[4] => 6
[5] => 5
[6] => 2
[7] => 4
[8] => 3
)
)
|
а нужно чтобы вложенные массивы [0][1][2][3] были расположены по величине элемента с адресом 7. По убыванию.
Пока результат после сортировки выглядит так:
Array
(
[0] => Array
(
[0] => 123
[1] => 0
[2] => 1
[3] => 0
[4] => 4
[5] => 5
[6] => 1
[7] => 0
[8] => 2
)
[1] => Array
(
[0] => 1
[1] => 1
[2] => 0
[3] => 1
[4] => 6
[5] => 5
[6] => 2
[7] => 4
[8] => 3
)
[2] => Array
(
[0] => test
[1] => 0
[2] => 0
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 4
)
[3] => Array
(
[0] => ypa
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 5
)
|
| |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 12:58)
| | Вы говорили о последнем столбце - для него код и набросан. Хотите для седьмого - переделайте для седьмого. | |
|
|
|
|
|
|
|
для: Trianon
(07.05.2007 в 13:02)
| |
<?php
function my_cmp ($ra, $rb) { return $ra[7] - $rb[7]; }
usort ($listAllPoints, 'my_cmp');
?>
|
возвращает почти то что нужно, только наоборот) т.е. по возрастанию :)
можно конечно array_revers, но..... | |
|
|
|
|
|
|
|
для: hammet
(07.05.2007 в 13:13)
| | >возвращает почти то что нужно, только наоборот) т.е. по возрастанию :)
>можно конечно array_revers,
а можно и return $rb[7] - $ra[7]; | |
|
|
|
|
|
|
|
для: Trianon
(07.05.2007 в 13:19)
| | Спасибо большое :)
Надеюсь это будет хороший урок для меня! | |
|
|
|