Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка двумерного массива
 
 автор: hammet   (07.05.2007 в 11:50)   письмо автору
 
 

Помогите отсортировать матрицу...знаю что школьная задача, но что то не получается (

есть массив вида:

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


т.е. по убыванию....

   
 
 автор: Trianon   (07.05.2007 в 11:54)   письмо автору
 
   для: hammet   (07.05.2007 в 11:50)
 

показывайте код, в котором не получается.

   
 
 автор: hammet   (07.05.2007 в 11:58)   письмо автору
 
   для: 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 в 12:19)   письмо автору
 
   для: hammet   (07.05.2007 в 11:58)
 

ну что, кто нибудь может помочь?

   
 
 автор: bronenos   (07.05.2007 в 12:20)   письмо автору
 
   для: hammet   (07.05.2007 в 11:58)
 

Не знаю, как он будет вести себя с цифрами...
<?php
function like ($a$b)
{
  if (
$a == $b) return 0;
  return (
$a $b) ? -1;
}

foreach (
$listAllPoints as $k=>$v)
  
usort ($listAllPoints'like');
?>

не проверял, сразу скажу

   
 
 автор: hammet   (07.05.2007 в 12:25)   письмо автору
 
   для: bronenos   (07.05.2007 в 12:20)
 

да,я читал мануал по этой функции....
пробовал так делать....я не очень понимаю ее логику....пока что не вышло

   
 
 автор: Trianon   (07.05.2007 в 12:28)   письмо автору
 
   для: 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) ? -: ($a $b); 


usort ($listAllPoints'my_cmp'); 
?> 

   
 
 автор: Trianon   (07.05.2007 в 12:31)   письмо автору
 
   для: 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');  
?>  

   
 
 автор: hammet   (07.05.2007 в 12:58)   письмо автору
 
   для: Trianon   (07.05.2007 в 12:31)
 

получаем 0,4,1,0 :(

   
 
 автор: hammet   (07.05.2007 в 13:01)   письмо автору
 
   для: 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
        )

   
 
 автор: Trianon   (07.05.2007 в 13:02)   письмо автору
 
   для: hammet   (07.05.2007 в 12:58)
 

Вы говорили о последнем столбце - для него код и набросан. Хотите для седьмого - переделайте для седьмого.

   
 
 автор: hammet   (07.05.2007 в 13:13)   письмо автору
 
   для: Trianon   (07.05.2007 в 13:02)
 


<?php
function my_cmp ($ra$rb)  { return $ra[7] - $rb[7]; }
    
usort ($listAllPoints'my_cmp');
?>


возвращает почти то что нужно, только наоборот) т.е. по возрастанию :)

можно конечно array_revers, но.....

   
 
 автор: Trianon   (07.05.2007 в 13:19)   письмо автору
 
   для: hammet   (07.05.2007 в 13:13)
 

>возвращает почти то что нужно, только наоборот) т.е. по возрастанию :)
>можно конечно array_revers,

а можно и return $rb[7] - $ra[7];

   
 
 автор: hammet   (07.05.2007 в 13:37)   письмо автору
 
   для: Trianon   (07.05.2007 в 13:19)
 

Спасибо большое :)

Надеюсь это будет хороший урок для меня!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования