0

我不知道为什么会发生这种情况,也无法在谷歌上找到解决方案。

这是我的浮点数数组asortby SORT_NUMERIC

Array ( [0] => -5.092368092812E-9 [6] => -7.0826220389192E-13 [1] => 1.878703363826E-13
[2] => 1.8795587624424E-13 [3] => 2.3346288902754E-13 [4] => 3.0942295197372E-13 [5] =>
7.9098357204299E-13 [7] => 1.1684494919952E-12 [8] => 1.1685043272518E-12 [9] =>
1.1686030371986E-12 [11] => 8.0451267461732E-12 [12] => 3.7644522809587E-10 [13] =>
3.7763249406879E-10 [14] => 3.7955309374295E-10 [15] => 8.7712602092571E-10 [16] =>
2.8469968623087E-9 [17] => 2.8531226087777E-9 [10] => 6.2070895038159E-9 [18] =>
1.0725026970778E-8 [20] => 1.4052528456163E-8 [21] => 1.4087656025218E-8 [19] =>
2.0018554451113E-8 [22] => 1.130570524972E-7 [23] => 2.186127734393E-5 [25] =>
0.0045965175663413 [24] => 0.51061752595249 )

如何正确排序?

提前谢谢了!

4

3 回答 3

2

natsort会为你工作。

<?php  
// do stuf
$array  = Array ( -5.092368092812E-9 , -7.0826220389192E-13 , 1.878703363826E-13
, 1.8795587624424E-13 , 2.3346288902754E-13 , 3.0942295197372E-13 ,
7.9098357204299E-13 , 1.1684494919952E-12 , 1.1685043272518E-12 ,
1.1686030371986E-12 , 8.0451267461732E-12 , 3.7644522809587E-10 ,
3.7763249406879E-10 , 3.7955309374295E-10 , 8.7712602092571E-10 ,
2.8469968623087E-9 , 2.8531226087777E-9 , 6.2070895038159E-9 ,
1.0725026970778E-8 , 1.4052528456163E-8 , 1.4087656025218E-8 ,
2.0018554451113E-8 , 1.130570524972E-7 , 2.186127734393E-5 ,
0.0045965175663413 , 0.51061752595249 );

$res = natsort($array);

echo "<pre>";
print_r($array);

?>
于 2013-01-22T04:54:45.093 回答
1

这很尴尬。

asort维护索引关联。 sort才不是。使用sort.

http://php.net/manual/en/array.sorting.php

于 2013-01-22T03:34:22.560 回答
0

试试这个功能:

function masort(&$data, $sortby)
{
   static $sort_funcs = array();

   if (empty($sort_funcs[$sortby])) {
       $code = "\$c=0;";
       foreach (split(',', $sortby) as $key) {
         $array = array_pop($data);
         array_push($data, $array);
         if(is_numeric($array[$key]))
           $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] < \$b['$key']) ? -1 : 1 )) );";
         else
           $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return \$c;\n";
       }
       $code .= 'return $c;';
       $sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
   } else {
       $sort_func = $sort_funcs[$sortby];
   }
   $sort_func = $sort_funcs[$sortby];
   uasort($data, $sort_func);
}

我有它,它就像通用分拣机。

于 2013-01-22T03:33:09.630 回答