array_merge在2个不同的实体集合上,按公共属性对它们进行排序


array_merge on 2 different entities collection, sort them by common property

我有两个实体,Invoice和Advance。每个都有一个"paidAt"属性。

在控制器中,我在一个日期范围内获取Invoice和Advance。然后,我将它们合并为一个单独的数组,并将其推送到我的视图中,在那里我将它们显示在列表中。

在将它们推向我的视野之前,我想使用"paidAt"属性对它们进行排序。我在PHP文档上发现了一些多维排序函数,但都使用了PHP原生函数array_multisort()

所以Symfony给了我一个错误:Cannot use object of type Entity'Invoice as array

有什么可以做我想做的吗?

如果两个实体中都有getter getPaidAt(),则可以用于升序

usort(
    $collection,
    function($a, $b) {
        if ($a->getPaidAt() === $b->getPaidAt()) {
            return 0;
        }
        return ($a->getPaidAt() < $b->getPaidAt())? -1 : 1;
    }
);

如果要按降序排序,只需将<替换为>即可。

您可以使用usort只需编写自己的比较函数,它必须适合发票和预付款(您有超类吗?)

http://php.net/manual/de/function.usort.php

附加信息:在symfony2控制器内使用带有关联数组的usort