小编hal*_*ush的帖子

颠倒Doctrine_Collection的顺序

我正在寻找一种干净的方式来扭转Doctrine_Collection的顺序.我知道这听起来很奇怪,所以让我解释一下我的(简单)目标:我需要显示x 最新/最新的记录,但我必须以相反的顺序显示它:最老的第1个等等.

如果不清楚,这是一个例子:让我说我在我的表中有这个(让我们称之为'示例'):

id      date
1       2012-01-21
2       2012-03-19
3       2012-02-21
4       2012-03-21
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经这样做了:

Doctrine::getTable('Example')->createQuery('d')
    ->orderBy('date DESC')
    ->limit(3);
Run Code Online (Sandbox Code Playgroud)

哪个回来了

id      date
4       2012-03-21
2       2012-03-19
3       2012-02-21
Run Code Online (Sandbox Code Playgroud)

但我希望如此:

id      date
3       2012-02-21
2       2012-03-19
4       2012-03-21
Run Code Online (Sandbox Code Playgroud)

编辑:

我找到了一个解决方案,使用中间数组并使用array_reverse.但它看起来不太好:(

这是我写的代码:

    $query = Doctrine::getTable('Example')
            ->createQuery('e')
            ->orderBy('date DESC')
            ->limit(3)
        $collection = $query->execute();

        //Here is the dirty hack:
        $itemArray = array();
        foreach ($collection as $item) {
            $itemArray[] = $item;
        }
        $itemArray = array_reverse($itemArray);
        $orderedCollection = new Doctrine_Collection($doctrineClass);
        foreach($itemArray as $item) { …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony-1.4

12
推荐指数
3
解决办法
2万
查看次数

usort差异php7.1 vs php5.6

我目前正在将项目从php5.6迁移到php7.1.大多数情况进展顺利,但我只是在墙上进行了一次测试.

函数usort在两个版本上都没有相同的行为,并且它似乎没有记录(不是两个值是等于,然后顺序是未定义的).在我的测试用例中,返回的数组顺序是相反的.

这是问题的再现.请注意,我一直返回-1以简化(我在这里专注于PHP5.6和7之间的差异)

代码在两个版本上运行:

$a = [['value' => 1, 'toto' => 'toto'], ['value' => 1, 'toto' => null]];
usort($a, function ($a, $b) { return -1;});
print_r($a);
Run Code Online (Sandbox Code Playgroud)

PHP 5.6中的结果:

Array
(
    [0] => Array
        (
            [value] => 1
            [toto] =>
        )

    [1] => Array
        (
            [value] => 1
            [toto] => toto
        )

)
Run Code Online (Sandbox Code Playgroud)

PHP 7.1

Array
(
    [0] => Array
        (
            [value] => 1
            [toto] => toto
        )

    [1] => Array
        (
            [value] => 1
            [toto] =>
        )

)
Run Code Online (Sandbox Code Playgroud)

php php-7

2
推荐指数
1
解决办法
1877
查看次数

标签 统计

php ×2

doctrine ×1

php-7 ×1

symfony-1.4 ×1