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

Форум PHP

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

 

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

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

тема: Сортировка массива
 
 автор: smit272   (08.09.2008 в 15:05)   письмо автору
 
 

Есть массив

Array
(
    [0] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 2
            [Comment] => Тест1
            [newtime] => 1219251652
        )

    [1] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 1
            [Comment] => Тест1
            [newtime] => 1219251640
        )

    [2] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 2
            [Comment] => Тест1
            [newtime] => 1219251585
        )

    [3] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 4
            [Comment] => Тест1
            [newtime] => 1219251094
        )

    [4] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 6
            [Comment] => Тест1
            [newtime] => 1219250990
        )

    [5] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 8
            [Comment] => Новый Тест
            [newtime] => 1219251585
        )

    [6] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 3
            [Comment] => Новый Тест
            [newtime] => 1219251103
        )

    [7] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 7
            [Comment] => Новый Тест
            [newtime] => 1219250990
        )

    [8] => Array
        (
            [ID] => 167
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 3
            [Comment] => Новый х3
            [newtime] => 1219251859
        )

    [9] => Array
        (
            [ID] => 209
            [ParentID] => 248
            [IP] => 127.0.0.1
            [CommentID] => 4
            [Comment] => Без теста
            [newtime] => 1220726671
        )

)


Возможно, ли произвести сортировку этого массива по его ключам ParentID, ID и newtime?

Чтобы получился вот такой массив:

Array
(
    [8] => Array
        (
            [ID] => 167
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 3
            [Comment] => Новый х3
            [newtime] => 1219251859
        )
        
    [7] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 7
            [Comment] => Новый Тест
            [newtime] => 1219250990
        )
        
    [6] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 3
            [Comment] => Новый Тест
            [newtime] => 1219251103
        )
        
    [5] => Array
        (
            [ID] => 248
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 8
            [Comment] => Новый Тест
            [newtime] => 1219251585
        )

    [4] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 6
            [Comment] => Тест1
            [newtime] => 1219250990
        )

    [3] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 4
            [Comment] => Тест1
            [newtime] => 1219251094
        )

    [2] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 2
            [Comment] => Тест1
            [newtime] => 1219251585
        )

    [1] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 1
            [Comment] => Тест1
            [newtime] => 1219251640
        )
        
    [0] => Array
        (
            [ID] => 256
            [ParentID] => 101
            [IP] => 127.0.0.1
            [CommentID] => 2
            [Comment] => Тест1
            [newtime] => 1219251652
        )

    [9] => Array
        (
            [ID] => 209
            [ParentID] => 248
            [IP] => 127.0.0.1
            [CommentID] => 4
            [Comment] => Без теста
            [newtime] => 1220726671
        )

)

  Ответить  
 
 автор: Trianon   (08.09.2008 в 16:35)   письмо автору
 
   для: smit272   (08.09.2008 в 15:05)
 

usort()

  Ответить  
 
 автор: smit272   (08.09.2008 в 16:36)   письмо автору
 
   для: Trianon   (08.09.2008 в 16:35)
 

а функцию для usort?

  Ответить  
 
 автор: Trianon   (08.09.2008 в 16:42)   письмо автору
 
   для: smit272   (08.09.2008 в 16:36)
 

придется написать, само собой.

  Ответить  
 
 автор: smit272   (08.09.2008 в 17:37)   письмо автору
 
   для: Trianon   (08.09.2008 в 16:42)
 

))
так по идее в этом то и был вопрос.
потому что не получаеться написать нормальную функцию :)

  Ответить  
 
 автор: Trianon   (08.09.2008 в 17:39)   письмо автору
 
   для: smit272   (08.09.2008 в 17:37)
 

пользовательскую функцию сравнения по одному ключу получается написать?
показывайте то что получается.

  Ответить  
 
 автор: smit272   (08.09.2008 в 17:58)   письмо автору
 
   для: Trianon   (08.09.2008 в 17:39)
 

<?
function compare($a$b) { 
    return 
strcmp($a["ParentID"], $b["ParentID"]); //выбираем нужный ключ для сортировки 
}
usort($tree"compare");
?>

  Ответить  
 
 автор: Trianon   (08.09.2008 в 18:07)   письмо автору
 
   для: smit272   (08.09.2008 в 17:58)
 

<?
function compare($a$b

  if(
$a["ParentID"] != $b["ParentID"]) 
    return 
* ($a["ParentID"] > $b["ParentID"]) - 1;
  if(
$a["newtime"] != $b["newtime"]) 
    return 
* ($a["newtime"] > $b["newtime"]) - 1;
  if(
$a["ID"] != $b["ID"]) 
    return 
* ($a["ID"] > $b["ID"]) - 1;
  return 
0;
}


Но следует учесть что если данные числовые, то и элементы массива должны быть числовыми . А не текстовыми. Так что вероятно потребуется приведение к int при сравнении.

  Ответить  
 
 автор: Temnovit   (08.09.2008 в 17:42)   письмо автору
 
   для: smit272   (08.09.2008 в 17:37)
 

Например так:
<?
function so ($a$b) {
   if ( 
$a['ParentID'] > $b['ParentID']) return 1;
   if ( 
$a['ParentID'] < $b['ParentID']) return 0;
    if ( 
$a['ParentID'] == $b['ParentID']) return -1;
}

uasort($arr'so');

?>

  Ответить  
 
 автор: smit272   (08.09.2008 в 17:49)   письмо автору
 
   для: Temnovit   (08.09.2008 в 17:42)
 

а если на 2 и на 3?

  Ответить  
 
 автор: Temnovit   (08.09.2008 в 18:03)   письмо автору
 
   для: smit272   (08.09.2008 в 17:49)
 

>а если на 2 и на 3?
Не понимаю вопроса...

  Ответить  
 
 автор: smit272   (08.09.2008 в 18:05)   письмо автору
 
   для: Temnovit   (08.09.2008 в 18:03)
 

Ну надо для 3-ех различных ключей
ParentID, ID, newtime

  Ответить  
 
 автор: Trianon   (08.09.2008 в 18:02)   письмо автору
 
   для: Temnovit   (08.09.2008 в 17:42)
 

> if ( $a['ParentID'] < $b['ParentID']) return 0;
> if ( $a['ParentID'] == $b['ParentID']) return -1;
издеваемся?

  Ответить  
 
 автор: Temnovit   (08.09.2008 в 18:03)   письмо автору
 
   для: Trianon   (08.09.2008 в 18:02)
 

Путаемся :) Наоборот, конечно.

  Ответить  
 
 автор: smit272   (08.09.2008 в 18:19)   письмо автору
 
   для: Temnovit   (08.09.2008 в 18:03)
 

всем спасибо.
все работает

  Ответить  
Rambler's Top100
вверх

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