php 按日期升序排序,并移动具有null、last [duplicate]的日期

bsxbgnwa  于 2022-12-10  发布在  PHP
关注(0)|答案(2)|浏览(108)

此问题在此处已有答案

How can I sort arrays and data in PHP?(14个答案)
昨天关门了。
我有一个维数组,我想用expiryDate => null移动这个数组,最后
顺便说一句,我之前在这里和谷歌上搜索过。我找不到我的答案
我有一个名为$topics的数组

$topics = [
   [
     'expiryDate' => null
   ],
   [
     'expiryDate' => "2030-02-02"
   ]
   [
     'expiryDate' => "2020-02-02"
   ]
];

我想把第一个移下来,因为到期日为空。
这是我代码:

foreach ($topics as $key => $value) {

    if ($value['expiryDate'] === null) {
        unset($topics[$key]);
        $topics[] = $value;
    }

}

我的预期结果是:

$topics = [
   [
     'expiryDate' => "2020-02-02"
   ],
[
     'expiryDate' => "2030-02-02"
   ],
   [
     'expiryDate' => null
   ]
];
7qhs6swi

7qhs6swi1#

按照Mike的建议,使用usort
如果要对数组ascending进行排序并将null值移到末尾:

$topics = [
  [
    'expiryDate' => null
  ],
  [
    'expiryDate' => "2030-02-02"
  ],
  [
    'expiryDate' => "2020-02-02"
  ]
];

function cmp($a, $b)
{
  if (is_null($a["expiryDate"])) return 1;
  if (is_null($b["expiryDate"])) return -1;

  // otherwise ascending
  return $a["expiryDate"] > $b["expiryDate"];
}

usort($topics, 'cmp');

echo json_encode($topics);

输出为:

[{"expiryDate":"2020-02-02"},{"expiryDate":"2030-02-02"},{"expiryDate":null}]
2cmtqfgy

2cmtqfgy2#

让我们试试usort

$topics = [
[
     'expiryDate' => null
   ],
   [
     'expiryDate' => "2020-02-02"
   ]
];

usort($topics, 'cmp');

print_r($topics);

function cmp($a, $b)
{
    return strcmp($b["expiryDate"], $a["expiryDate"]);
}

相关问题