Сортировка массива по дате

Alexandre

PHPПенсионер
Сортировка массива по дате

есть массив, состоящий из элементов items который представляет массив
PHP:
            $items[$i] = array(
                'id' => getId(),
                'name' => $name,
                'day' => $day ,
                'month' => $monthArr[ $month ], 
                'year' => $year,   
                'weekday' => $weekDay  ,
                'week' => $week,
)
надо массив отсортировать по ключу 'day'

делаю
PHP:
function compareByDay( $a1, $a2 )
{
 if ($a1['day'] == $a2['day'])   return 0;

   return (intval($a1['day']) < intval($a2['day']) ) ? -1 : 1;
}

usort ($items, 'compareByDay' );
Массив сортируется, но ....
почему-то в массиве пропущены все элементы c датами до 10 числа.

есть 1 и 10
нет 2 3 и так до 9
 

Demiurg

Guest
Приведи пример данных, что бы можно было у себя попробовать.
 

Alexandre

PHPПенсионер
PHP:
Array
(
    [0] => Array
        (
            [id] => 16
            [name] => Monday weekly events
            [day] => 19
            [month] => March
            [year] => 2004
            [weekday] => Friday
            [week] => 5
            [monthN] => 03
            [location] => ertertetr
            [hot] => 0
        )

    [1] => Array
        (
            [id] => 27
            [name] => MILLER MUSIC JET TOUR (CAPRICE)
            [day] => 1
            [month] => March
            [year] => 2004
            [weekday] => Monday
            [week] => 1
            [monthN] => 03
            [location] => Caprice Night Club (967 Granville Street), VANCOUVER
            [hot] => 1
        )

    [2] => Array
        (
            [id] => 28
            [name] => MICKEY FINN-URBAN TAKEOVER- LONDON UK
            [day] => 1
            [month] => March
            [year] => 2004
            [weekday] => Monday
            [week] => 1
            [monthN] => 03
            [location] => Cellar Nightclub (1006 Granville Street), VANCOUVER
            [hot] => 1
        )

    [3] => Array
        (
            [id] => 29
            [name] => CRYSTAL METHOD - LEGION OF BOOM TOUR
            [day] => 1
            [month] => March
            [year] => 2004
            [weekday] => Monday
            [week] => 1
            [monthN] => 03
            [location] => Commodore Ballroom (868 Granville Street), VANCOUVER
            [hot] => 0
        )

    [4] => Array
        (
            [id] => 30
            [name] => BRAZILIAN CRUSH
            [day] => 18
            [month] => March
            [year] => 2004
            [weekday] => Thursday
            [week] => 4
            [monthN] => 03
            [location] => Crush Champagne Lounge (1180 Granville Street), VANCOUVER
            [hot] => 0
        )

    [5] => Array
        (
            [id] => 31
            [name] => DEPECHE MODE TRIBUTE PARTY
            [day] => 2
            [month] => March
            [year] => 2004
            [weekday] => Thursday
            [week] => 4
            [monthN] => 03
            [location] => Plaza Club (881 Granville Street), VANCOUVER
            [hot] => 0
        )

    [6] => Array
        (
            [id] => 32
            [name] => DJ REMSTA INT'L GOLD PREMIERE & N.E.R.D ALBUM RELEASE PARTY
            [day] => 4
            [month] => March
            [year] => 2004
            [weekday] => Friday
            [week] => 5
            [monthN] => 03
            [location] => Atlantis Nightclub (1320 Richards Street), VANCOUVER
            [hot] => 0
        )

    [7] => Array
        (
            [id] => 33
            [name] => GENE FARRIS
            [day] => 19
            [month] => March
            [year] => 2004
            [weekday] => Friday
            [week] => 5
            [monthN] => 03
            [location] => Bar None (1222 Hamilton Street), VANCOUVER
            [hot] => 0
        )

    [8] => Array
        (
            [id] => 34
            [name] => SCUMFROG DEX&EFX SET
            [day] => 20
            [month] => March
            [year] => 2004
            [weekday] => Saturday
            [week] => 6
            [monthN] => 03
            [location] => Sonar (66 Water Street), VANCOUVER
            [hot] => 0
        )

    [9] => Array
        (
            [id] => 35
            [name] => weekly wednesday
            [day] => 11
            [month] => March
            [year] => 2004
            [weekday] => Wenesday
            [week] => 4
            [monthN] => 3
            [location] => 
            [hot] => 0
        )

    [10] => Array
        (
            [id] => 2
            [name] => Thursday weekly events
            [day] => 12
            [month] => March
            [year] => 2004
            [weekday] => Thursday
            [week] => 5
            [monthN] => 3
            [location] => Location
            [hot] => 0
        )

    [11] => Array
        (
            [id] => 37
            [name] => test weekly event
            [day] => 12
            [month] => March
            [year] => 2004
            [weekday] => Thursday
            [week] => 5
            [monthN] => 3
            [location] => 
            [hot] => 1
        )
 

Falc

Новичок
Для начала я бы упростил функцию:

function compareByDay( $a1, $a2 )
{
return $a1['day'] - $a2['day'];
}
 

Demiurg

Guest
то есть после сортировки массив становится меньше ?
 

Alexandre

PHPПенсионер
то есть после сортировки массив становится меньше ?
нет - они оказывается просто не формировались,
не корректно работала операция слияния массивов.
делал так:
Код:
$arrSumm =  $add1 + $arr2;
вот при слиянии данные и пропадали :confused: :confused: :confused: :)
 

korvin0

моська
Извините, что вмешиваюсь, но такой скрипт:
Код:
<pre>
<?php
$items = array (
		array('id'=>0,'day'=>4),
		array('id'=>1,'day'=>2),
		array('id'=>2,'day'=>12),
		array('id'=>3,'day'=>3),
		array('id'=>4,'day'=>6),
		array('id'=>5,'day'=>76),
		array('id'=>6,'day'=>22),
		array('id'=>7,'day'=>17),
		array('id'=>8,'day'=>31),
		array('id'=>9,'day'=>13),
		array('id'=>10,'day'=>8),
		array('id'=>11,'day'=>60),
		array('id'=>12,'day'=>1),
		array('id'=>13,'day'=>62)
	);
function compareByDay( $a1, $a2 ) { 
 return $a1['day'] - $a2['day']; 
}
usort($items,'compareByDay');
var_dump($items);
?>
У меня сортирует все как и должно. Может, у Alexandre проблемы с конфигурацией php?

-~{}~ 19.05.04 17:45:

Опоздал с постингом...
 

Profic

just Profic (PHP5 BetaTeam)
Alexandre
Это не операция слияния. При такой операции те элементы, ключи которых уже были в левом массиве, из правого не заносятся совсем, а игнорируются. Используй array_merge()
 

Alexandre

PHPПенсионер
korvin0 - у меня тоже сортирует как надо и моей старой функцией,
просто проблема была в слиянии массивов

Profic спасибо,
я сделал влоб - два цикла перебора для слияния
пост от 07.05.04

а с array_megre тоже были какие-то накладки
 

Profic

just Profic (PHP5 BetaTeam)
Alexandre
Тьфу ты, не заметил, что тут у нас еще один землекопатель появился :)
 
Сверху