目前,我发现我无法使用其中一个键作为排序索引来排序对象数组。
假设数组是这样的:
Array
(
[0] => stdClass Object
(
[Id] => e6930148-319f-4b87-bb57-8aae98adfc55
[State] => FINISHED
[StartDate] => 2018-05-03T08:57:30+02:00
[EndDate] => 2018-05-03T08:59:17+02:00
)
[1] => stdClass Object
(
[Id] => 4263f6a9-6e49-4aee-bcf6-70e1d2578fc5
[State] => FINISHED
[StartDate] => 2018-05-03T10:15:39+02:00
[EndDate] => 2018-05-03T10:15:58+02:00
)
我需要的是所有结果都按 StartDate 的值和降序排序,始终将最新的记录作为第一条记录。
我试过生成一个比较函数
function comp($a, $b) {
if ($a < $b) return true;
else return false;
}
用我得到的数据生成一个新数组
foreach ($json as $datos) {
$id = $datos->Id;
$estado = $datos->State;
$fechaIni = $datos->StartDate;
$fechaFin = $datos->EndDate;
$proceso = $datos->Configuration->ProcessId;
array_push($arrayDatos, $datos)
}
稍后从 uksort 给她打电话
uksort($arrayDAtos, comp(xxxx,yyyy))
但这是我觉得我很困惑的地方,因为我不知道如何将必要的值传递给comp函数,以便它按 StartDate 排序。
来吧,我不清楚 uksort 是如何工作的,也不知道comp函数应该做什么
usort
如果您不介意新数组的(数字)索引发生变化,您确实可以使用,否则您可以使用uasort
. 这两个函数都接受一个函数作为参数,我们在其中指示我们想要的顺序。在这种情况下,我们将使用我们的object_sorter
.我提出了这个功能,它有点先进,当然可以改进,它具有以下优点:
DESC
( ),当您想要DESC
缩进时。strnatcmp
,利用其优势,进行比较。功能很简单:
要使用它,您只需将数组传递给它。
要
ASC
通过 key 最终订购StarDate
:要
DESC
通过 key 最终订购StarDate
:全面测试:
VER DEMO EN REXTESTER
结果:
原件:
升序:
降序排列:
我希望它对你有用。
您可以像这样使用 usort 来做到这一点: