Заказать массив объектов по двум полям, дате и порядку - PullRequest
0 голосов
/ 04 мая 2020

Мне нужен порядок и массив объектов по двум полям:

1-дата, закрывается на сегодня

2-порядок (10 maximun и 0 minimun) AS C

Я использую usort для заказа по дате:

usort($array, function($a, $b) {
    return ( (abs(strtotime("now") - strtotime($a->date)) - (abs(strtotime("now") - strtotime($b->date)))) );
});

, но я не могу с полевым заказом ASC, есть идеи, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020
$array = [
  (object)["date" => "+2 minutes","order" =>  2],
  (object)["date" => "+2 minutes","order" =>  1],
  (object)["date" => "+1 minutes","order" =>  2],
];

usort($array, function($a, $b) {
        $v1 =  abs(strtotime("now") - strtotime($a->date)) <=> abs(strtotime("now") - strtotime($b->date));
        return $v1 ? $v1 : ($a->order <=> $b->order);
    });

echo "<pre>";
var_export($array);

Выход:

array (
  0 => 
  (object) array(
     'date' => '+1 minutes',
     'order' => 2,
  ),
  1 => 
  (object) array(
     'date' => '+2 minutes',
     'order' => 1,
  ),
  2 => 
  (object) array(
     'date' => '+2 minutes',
     'order' => 2,
  ),
) 
0 голосов
/ 04 мая 2020
    usort($array, function($a, $b) {
        return ( (abs(strtotime("now") - strtotime($a->date)) - (abs(strtotime("now") - 
        strtotime($b->date)))) && $a->order < $b->order ? 1 : -1);
    });

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...