【发布时间】:2013-09-23 12:42:04
【问题描述】:
我首先寻找一些 PHP 的预制排序函数。我确实找到了一些 http://php.net/manual/en/array.sorting.php ,但这不支持我的需求。如果可能的话,我不仅想升序排序,还想降序排序。我找不到这个功能(如果我错过了我真的很抱歉。我很难相信没有这样的预制功能,但找不到它)
我只是想要一个按给定键对数组进行排序的排序函数。这应该包括字母和数字。为此,我使用了strnatcasecmp(),效果很好。
我的函数有 3 个参数:一个用于排序的数组,一个用于升序或降序,一个用于排序的键。
这是我使用的数组的示例:
我的功能:
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;
}
它首先对键名进行排序,然后使用排序后的键名来获取数组的其他属性。它将返回所有文件属性的数组。
问题:
现在的问题是当你有一个大数组时它真的很慢。加载有时需要 10 秒。现在我想知道是否有可能使这个函数更快一些?
我试图使这个函数尽可能动态。
我希望我能很好地解释我对该函数的想法。我真的希望有人有一些技巧来改进这个功能。
非常感谢任何帮助,Nkmol
【问题讨论】:
标签: php arrays codeigniter sorting optimization