Как я могу отсортировать массив после члена его элементов в PHP? - PullRequest
1 голос
/ 11 апреля 2011

У меня проблемы с сортировкой дат в массиве.

$data[0]["Venue"];
$data[0]["VenueConfigurationID"];
$data[0]["VenueID"];
$data[0]["TimeStamp"];

$data[2]["Venue"];
$data[2]["VenueConfigurationID"];
$data[2]["VenueID"];
$data[2]["TimeStamp"];

$data[3]["Venue"];
$data[3]["VenueConfigurationID"];
$data[3]["VenueID"];
$data[3]["TimeStamp"];

Я хочу отсортировать эти массивы на основе значения TimeStamp.

Ответы [ 5 ]

2 голосов
/ 11 апреля 2011

Вы можете использовать решение, которое я представил для другого вопроса (см. Код функции make_comparer):

usort($data, make_comparer('TimeStamp'));

Это позволит вам отсортировать данные по любому числукритериев, и вы можете легко изменить критерии, просто изменив порядок или значение элементов массива.

0 голосов
/ 11 апреля 2011

Использование array_multisort Функция: -

<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $timestamp[$key]  = $row['TimeStamp'];        
}

// Sort the data with timestamp descending    
array_multisort($timestamp, SORT_DESC, $data);
?>

Надеюсь, это поможет.

0 голосов
/ 11 апреля 2011

Здесь много правильных ответов, но я обычно предпочитаю использовать usort с анонимными функциями:

PHP ≥ 5,3

usort($data, function($a, $b) {
    return $a['timestamp'] - $b['timestamp'];
});

PHP ≥ 4.0.1

usort($data, create_function('$a, $b',
    'return $a["timestamp"] - $b["timestamp"];'
));
0 голосов
/ 11 апреля 2011

Я думаю, вы можете сделать это:

function cmp($a, $b){
$a_t = strtotime( $a['TimeStamp'] ) ; 
$b_t = strtotime( $b['TimeStamp'] ) ; 

if ($a_t == $b_t) {
    return 0;
}
return ($a_t < $b_t) ? -1 : 1;
}

usort($data,'cmp');

надеюсь, что это работает

0 голосов
/ 11 апреля 2011

Вероятно, вы ищете usort.Используя эту функцию, вы можете указать функцию сравнения, которая будет использоваться для сравнения двух элементов.Таким образом, вы можете написать

function cmp($a, $b)
{
    if ($a['timestamp'] == $b['timestamp']) {
        return 0;
    }
    return ($a['timestamp'] < $b['timestamp']) ? -1 : 1;
}

, а затем:

usort($data, "cmp");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...