Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按数字对数组排序,当数字相同时,按字母排序_Php_Arrays_Sorting - Fatal编程技术网

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

Php 按数字对数组排序,当数字相同时,按字母排序,php,arrays,sorting,Php,Arrays,Sorting,我试图解决排序的问题。 正如我在标题中所写的,我需要按数字对数组进行排序,但当某些行具有相同的数字时,请按字母表对它们进行排序。我试着用两种排序法来实现这一点,但当我使用数字排序法,而不是字母排序法时,它就不起作用了。。所以我试着改变函数的顺序,但是在数字排序之后,它根本不保持字母排序。。。 有人能告诉我要编辑什么吗 代码如下: $nodesToSort = $this->openedContextMenu->getPreparedNodes();

我试图解决排序的问题。 正如我在标题中所写的,我需要按数字对数组进行排序,但当某些行具有相同的数字时,请按字母表对它们进行排序。我试着用两种排序法来实现这一点,但当我使用数字排序法,而不是字母排序法时,它就不起作用了。。所以我试着改变函数的顺序,但是在数字排序之后,它根本不保持字母排序。。。 有人能告诉我要编辑什么吗

代码如下:

        $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);
$nodesToSort=$this->openedContextMenu->getPreparedNodes();
$labelSort=函数($x,$y)
{
$xtranstrated=$this->getPresenter()->translator->translate($x->label);
$yTranslated=$this->getPresenter()->translator->translate($y->label);
返回strcmp($xtransated,$ytransated);
};
$compareSort=函数($a,$b)
{
如果($a->sort==$b->sort){
返回0;
}
返回($a->排序<$b->排序)?-1:1;
};
usort($nodesToSort,$labelSort);
usort($nodesToSort,$compareSort);
已解决。 我只需要合并这两个函数

    $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;
    };
$compareSort=函数($a,$b)
{
如果($a->sort==$b->sort){
$xtranstrated=$this->getPresenter()->translator->translate($a->label);
$yTranslated=$this->getPresenter()->translator->translate($b->label);
返回strcasecmp($xtransated,$ytransated);
}
返回($a->排序<$b->排序)?-1:1;
};

您是否非常不清楚?当您将相同的值作为数字或字符串进行排序时,会有什么不同?或者数字从哪里来,字母字符串从哪里来?或者让我这样问:
sort
是否可能有数字和字母字符串?如果不是的话,你想从哪里得到排序的字母字符串。发布一些示例输入和所需输出,让它更清晰。