Мне просто нужна функция сортировки, которая сортирует массив по заданному ключу. Оно должно включать буквы и цифры. Для этого я использовал strnatcasecmp(), и это сработало отлично.
Моя функция имеет 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
)
)
Код: Выделить всё
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 "
." .$sAction. "
{
-webkit-transform:scaleY(-1) !important;
}
";
}
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 секунд. Теперь интересно, можно ли сделать эту функцию несколько быстрее?
Подробнее здесь: https://stackoverflow.com/questions/189 ... g-function
Мобильная версия