Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > сортировка массива


Автор: patap 2.12.2009, 13:08
Посоветуйте как правильно отсортировать данный массив по полю update_timestamp?

фрагмент массива
Код
Array
(
    [0] => Array
        (
            [follow_following_id] => 2
            [user_sex] => male
            [last_update] => Array
                (
                    [0] => Array
                        (
                            [update_id] => 13
                            [update_text] => a fdg afg ag a a gadfg dfg
                            [update_timestamp] => 1259671626
                        )
                )
            [comments_cnt] => 5
            [comments] => Array
                (
                    [0] => Array
                        (
                            [uc_text] => asdf asdf asdf
                            [uc_datetime] => 2009-12-01 15:16:39
                            [user_name] => fake
                            [user_avatar] => cbbe64c56b720e7b83c2613319c814aa.jpg
                            [comment_timestamp] => 1259673399
                        )
                )
            [likes_cnt] => 0
        )
)


вот забил  сокращенную версию
Код
  $mas = array(
    array('last_update' => array(array('update_timestamp' => 6))),
    array('last_update' => array(array('update_timestamp' => 8))),
    array('last_update' => array(array('update_timestamp' => 3))),
    array('last_update' => array(array('update_timestamp' => 2))),
    array('last_update' => array(array('update_timestamp' => 5))),
    array('last_update' => array(array('update_timestamp' => 1))),
    array('last_update' => array(array('update_timestamp' => 9))),
    array('last_update' => array(array('update_timestamp' => 4)))
  );
  
  echo '<pre>';
  print_r($mas);
  echo '</pre>';

Автор: Pitlord 2.12.2009, 13:14
Код

<?php

function cmp($a, $b)
{
    if($a['last_update'][0]['update_timestamp'] == $b['last_update'][0]['update_timestamp'])
        return 0;

    return ($a['last_update'][0]['update_timestamp'] < $b['last_update'][0]['update_timestamp']) ? -1 : 1;
}

$arr = array(
    array('last_update' => array(array('update_timestamp' => 6))),
    array('last_update' => array(array('update_timestamp' => 8))),
    array('last_update' => array(array('update_timestamp' => 3))),
    array('last_update' => array(array('update_timestamp' => 2))),
    array('last_update' => array(array('update_timestamp' => 5))),
    array('last_update' => array(array('update_timestamp' => 1))),
    array('last_update' => array(array('update_timestamp' => 9))),
    array('last_update' => array(array('update_timestamp' => 4)))
);


usort($arr, 'cmp');

print_r($arr);

?>

Автор: patap 2.12.2009, 13:24
Pitlord, спасибо! подозревал что нужно usort(), но, до этого момента, не мог понять как в пользовательской функции указать нужный ключ..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)