PHP-自定义排序函数的改进

PHP-自定义排序函数的改进,php,arrays,codeigniter,sorting,optimization,Php,Arrays,Codeigniter,Sorting,Optimization,我首先查找了一些PHP的预制排序函数。我确实找到了一些,但是这不符合我的需要。我不仅想按升序排序,如果可能的话还想按降序排序。我找不到这个函数(如果错过了,我真的很抱歉。我很难相信没有这样的预制函数,但找不到) 我只需要一个排序函数,它根据给定的键对数组进行排序。这应该包括字母和数字。我用过这个,效果很好 我的函数有3个参数:一个用于数组排序,一个用于数组是否应该升序或降序,另一个用于应该排序的键 下面是我使用的一个数组示例: Array ( [test'l(ol.txt] =&g

我首先查找了一些PHP的预制排序函数。我确实找到了一些,但是这不符合我的需要。我不仅想按升序排序,如果可能的话还想按降序排序。我找不到这个函数(如果错过了,我真的很抱歉。我很难相信没有这样的预制函数,但找不到)

我只需要一个排序函数,它根据给定的键对数组进行排序。这应该包括字母和数字。我用过这个,效果很好

我的函数有3个参数:一个用于数组排序,一个用于数组是否应该升序或降序,另一个用于应该排序的键
下面是我使用的一个数组示例:

Array ( [test'l(ol.txt] => Array ( [name] => test'l(ol [date] => 1379595716 [size] => 0 b [extension] => txt [path] => shared\test/test'l(ol.txt [thumb] => images/files/txt.png ) [test(2).txt] => Array ( [name] => test(2) [date] => 1379595716 [size] => 0 b [extension] => txt [path] => shared\test/test(2).txt [thumb] => images/files/txt.png ) [test2.txt] => Array ( [name] => test2 [date] => 1379595716 [size] => 0 b [extension] => txt [path] => shared\test/test2.txt [thumb] => images/files/txt.png ) ) 排列 ( [test'l(ol.txt]=>数组 ( [名称]=>测试(ol) [日期]=>1379595716 [大小]=>0 b [扩展]=>txt [路径]=>共享\test/test'l(ol.txt [拇指]=>图像/文件/txt.png ) [测试(2.txt)]=>数组 ( [名称]=>测试(2) [日期]=>1379595716 [大小]=>0 b [扩展]=>txt [path]=>shared\test/test(2).txt [拇指]=>图像/文件/txt.png ) [test2.txt]=>数组 ( [名称]=>test2 [日期]=>1379595716 [大小]=>0 b [扩展]=>txt [path]=>shared\test/test2.txt [拇指]=>图像/文件/txt.png ) )
我的职能:

功能分拣机($aNamen、$bAsc、$sAction)
{
foreach($anamenas$array)
{
$keyNaams[]=$array[$sAction];
}
//$for='$i=0;$i0)//字符串1和字符串2
{
//回声$keyNaams[$i]。“是格罗特·丹”。$keyNaams[$i-1];
$nameTemp=$keyNaams[$i];
$keyNaams[$i]=$keyNaams[$i+$iPlus];
$keyNaams[$i+$iPlus]=$nameTemp;
}
}
}
}
foreach($keyNaams作为$name)
{
foreach($anamenas$array)
{
if($array[$sAction]==$name)
{
$values=array\u值($array);
$key=array\u key($array);
$i=0;
//$mapsSort=array();
foreach($test的值)
{
如果(!isset($mapsSort[$array['name']]))
{
$mapsort[$array['name']]=array(
$key[$i]=>$value[$i]
);
}
$arr=数组(
$key[$i]=>$value[$i]
);
$mapsSort[$array['name']]=array_merge($mapsSort[$array['name']]],$arr);
$i=$i+1;
}
}
}
}
返回$mapsort;
}
它首先对keynaams进行排序,并使用排序后的keyname获取数组的其他属性。它将返回所有文件属性的数组。

问题:

现在的问题是,当你有一个大的数组时,它真的很慢。有时加载需要10秒。现在我想知道是否有可能使这个函数更快一些?
我试图使函数尽可能动态。

我希望我能很好地解释我对该函数的想法。我真的希望有人能提供一些技巧来改进该函数。
非常感谢您的帮助,Nkmol

使用uasort并实现一个自定义函数,该函数根据给定参数进行排序。

uasort不是只支持升序吗?它以用户函数指定的方式进行排序。比较功能是“自行生成”,由您决定何时返回1或-1。谢谢您,先生!我下次应该再阅读一些手册。使用此示例:它的生成速度非常快,谢谢!)
function sorteer($aNamen, $bAsc, $sAction)
{
    foreach($aNamen as $array)
    {
            $keyNaams[] = $array[$sAction];
    }

    //$for = '$i=0;$i < count($aNamen); $i++';
    $iStart = 0;
    $iEnd = count($keyNaams);
    $iPlus = 1;

    if($bAsc == true)
    {
        //$for = '$i=count($aNamen)-1;$i > 0; $i--';
        $iStart = count($keyNaams)-1;
        $iEnd = 0;
        $iPlus = -1;

        echo " <style type='text/css'>
                ." .$sAction. "
                {
                    -webkit-transform:scaleY(-1) !important;
                }
                </style>";
    }


    for($x=0;$x < count($keyNaams)*count($keyNaams); $x++)
    {
        //for($i = $iStart;$i .$forPar2. $evalPar3;$i. $forPar4)
        for($i=$iStart;$i != $iEnd; $i += $iPlus)
        {
            if(!empty($keyNaams[$i + $iPlus]))
            {
                if(strnatcasecmp($keyNaams[$i], $keyNaams[$i + $iPlus]) > 0) //string 1 groter dan string 2
                {
                    //echo $keyNaams[$i] .' is groter dan '. $keyNaams[$i - 1];
                    $nameTemp = $keyNaams[$i];
                    $keyNaams[$i] = $keyNaams[$i + $iPlus];
                    $keyNaams[$i + $iPlus] = $nameTemp;
                }
            }

        }
    }

    foreach($keyNaams as $name)
    {
        foreach($aNamen as $array)
        {
            if($array[$sAction] == $name)
            {
                $values = array_values($array);
                $key = array_keys($array);
                $i = 0;
                //$mapsSort = array();
                foreach($values as $test)
                {
                    if(!isset($mapsSort[$array['name']]))
                    {
                        $mapsSort[$array['name']] = array(
                                $key[$i] => $values[$i]
                        );
                    }

                    $arr = array(
                            $key[$i] => $values[$i]
                    );

                    $mapsSort[$array['name']] = array_merge($mapsSort[$array['name']], $arr);

                    $i = $i + 1;
                }

            }
        }
    }

    return $mapsSort;
}