按数字排序数组,当相同的数字时,按字母排序

时间:2017-03-16 14:24:32

标签: php arrays sorting

我正在尝试解决排序问题。 正如我写的标题,我需要按数字排序数组,但是当某些行具有相同的数字时,请按字母排序。我试图用两种方式来做这个,但是当我使用数字排序而不是按字母表排序时,它不起作用。所以我试图改变函数的顺序,但仍然,在数字排序之后,它根本不按字母排序...... 有人可以告诉我要编辑什么吗?

以下代码:

        $nodesToSort = $this->openedContextMenu->getPreparedNodes();

        $labelSort = function($x, $y)
        {
            $xTranslated = $this->getPresenter()->translator->translate($x->label);
            $yTranslated = $this->getPresenter()->translator->translate($y->label);
            return strcmp($xTranslated, $yTranslated);
        };

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

        usort($nodesToSort, $labelSort);
        usort($nodesToSort, $compareSort);

1 个答案:

答案 0 :(得分:0)

解决。 我只需合并这两个函数。

    $compareSort = function ($a, $b)
    {
        if ($a->sort == $b->sort) {
            $xTranslated = $this->getPresenter()->translator->translate($a->label);
            $yTranslated = $this->getPresenter()->translator->translate($b->label);
            return strcasecmp($xTranslated, $yTranslated);
        }
        return ($a->sort < $b->sort) ? -1 : 1;
    };