Это массив или нет? - PullRequest
       10

Это массив или нет?

0 голосов
/ 01 ноября 2018

У меня есть этот массив, заполненный данными из базы данных

$collectTable1 = array( 'errand' => $interest->errand_id,
                        'timestamp' => $interest->timestamp,
                        'type' => $interest->type,
                        'amount' => $interest->amount
                    );

$collector[] = $collectTable1; 

И я хочу rsort отметку времени, как это

$sortTime = rsort($collectedData['timestamp']);

Я попробовал это, и я получил этот вывод

 function timesort($a, $b) {


 return (intval($a['timestamp']) > intval($b['timestamp']));
}

usort($collector, "timesort");

2017-12-01 10: 53: 26

Я думал, что получу от нисходящей точки? Что-то вроде 2018-09-04 12:32:16.

Моя временная метка также содержит как unixtimestamp, так и обычные даты, подобные этой " 2017-12-01 10:53:26 "

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Когда у вас есть массив:

<?php

$data = [
    ['timestamp' => '100'],
    ['timestamp' => '300'],
    ['timestamp' => '200']
];

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

var_export($data);

Выход:

array (
    0 => 
    array (
    'timestamp' => '300',
    ),
    1 => 
    array (
    'timestamp' => '200',
    ),
    2 => 
    array (
    'timestamp' => '100',
    ),
)
0 голосов
/ 01 ноября 2018

Если у вас есть несколько значений для всех ключей ассоциативного массива $ collectTable1, чем

foreach($interest as $i){
$collectTable1 = array( 'errand' => array($i->errand_id),
                        'timestamp' => array($i->timestamp),
                        'type' => array($i->type),
                        'amount' => array($i->amount)
                    );


rsort($collectTable1[‘timestamp’]);

Здесь collectTable1 - ассоциативный массив одномерных массивов, т.е.

$ collectTable1 [ «Отметка времени»] [0] = firstvalue $ collectTable1 [‘timestamp’] [1] = secondvalue

и т. Д.

0 голосов
/ 01 ноября 2018

Полагаю, у вас есть массив элементов в $collector.

Если вы хотите отсортировать их по timestamp, вы можете использовать usort

Рассмотрим следующий пример:

$collector = array();
$e1 = array("errand" => 1, "timestamp" => "2017-12-01 10:53:26");
$e2 = array("errand" => 2, "timestamp" => "2018-07-01 10:53:26");
$e3 = array("errand" => 3, "timestamp" => "2018-12-01 10:53:26");

$collector = array($e1, $e2, $e3);

function cmp($a, $b)
{
    return (strtotime($a['timestamp']) < strtotime($b['timestamp']));
}

usort($collector, "cmp");

Когда ваши timestamp значения находятся в строке, используйте strtotime , чтобы преобразовать их в EPOC перед сравнением.

Теперь элементы массива $collector отсортированы по значению timestamp.

Вывод примера кода:

Array
(
    [0] => Array
        (
            [errand] => 3
            [timestamp] => 2018-12-01 10:53:26
        )
    [1] => Array
        (
            [errand] => 2
            [timestamp] => 2018-07-01 10:53:26
        )
    [2] => Array
        (
            [errand] => 1
            [timestamp] => 2017-12-01 10:53:26
        )
)
...