Symfony2 - 如何对合并的对象数组进行排序?

时间:2014-07-17 11:24:05

标签: sorting symfony merge usort

我有4个数组,我试图从最高到最低排序属性视图。

我试图弄清楚如何对合并的数组进行排序。

现在,对于合并的数组,我从第1组中获得从最高到最低的视图,然后在第2组中具有从最高到最低的视图。

如何对两个集合进行排序,以便对一个合并数组中的4个数组进行最高到最低的查看?

(例如,当前:合并数组1:最高 - 最低视图/合并数组2:从最高到最低视图---我希望所有4合1中最高到最低)

我有两组已排序的对象数组:

private static function postSort($post, $post2)
{
    return $post->getViews() == $post2->getViews()  ? 0 : ( $post->getViews() < $post2->getViews()) ? 1: -1;
}

private static function postSort2($post3, $post4)
{
    return $post3->getViews() == $post4->getViews()  ? 0 : ( $post3->getViews() < $post4->getViews()) ? 1: -1;
}

我正在使用usort对视图进行从最高到最低排序:

$posts = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post')
    ->getPosts();

$posts2 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post2')
    ->getPosts2();

$posts3 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post3')
    ->getPosts3();

$posts4 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post4')
    ->getPosts4();

$postTotal1 = array_merge($posts, $posts2);

usort($postTotal1, array($this, 'postSort'));

$postTotal2 = array_merge($posts3, $posts4);

usort($postTotal2, array($this, 'postSort2'));

$total = array_merge($postTotal, $postTotal2);

1 个答案:

答案 0 :(得分:1)

通过仅使用1个postSort和一个usort以及所有4个实体的合并数组来解决。

只需使用1个postSort功能:

private static function postSort($item1, $item2)
{
return $item1->getViews() == $item2->getViews()  ? 0 : ( $item1->getViews() < $item2->getViews()) ? 1: -1;
}

使用1 usort和所有4个数组的array_merge:

$posts = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post')
    ->getPosts();

$posts2 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post2')
    ->getPosts2();

$posts3 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post3')
    ->getPosts3();

$posts4 = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post4')
    ->getPosts4();

$postTotal = array_merge($posts, $posts2, $post3, $post4);

usort($postTotal, array($this, 'postSort'));