0

我试图找出排序这个数组的最快方法(即性能方面)。

我想按每个数组中的第一个键按字母顺序排序...

$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));

排序后应该看起来像......

$results = array(array('apple', '<', '4'), array('dog', '!=', '5'), array('foo', '=', '1'));

有任何想法吗?

4

3 回答 3

0

sort() 函数就像你想要的那样工作:

<?php
$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));
sort($results);
//$results is now what you want
?>

在 5.2.17 测试

于 2012-07-04T09:03:17.127 回答
0

您可能会发现 array_multisort 是您所需要的:

<?php
        $sort_array = array();

        foreach($results as $key => $sub_array){
                $sort_array[$key] = $sub_array[0];//fill the sort array with the values you want to sort on
        }

        array_multisort($sort_array, $results);
?>

array_multisort 函数对给定的第一个数组进行排序,然后使用键顺序对第二个数组进行排序。您可能可以在创建初始结果集的同一循环中创建排序数组。

有关更多信息,请参见此处:http: //php.net/manual/en/function.array-multisort.php

于 2012-07-04T09:12:09.530 回答
0

usort 和 multisort 相对较慢 - 这变成了 >100 K 记录的痛苦。然而 PHP 的强度是关联数组。只需基于该核心功能构建索引并基于此应用快速 ksort。这就是我的意思:

function array_index($dataarr,sortingkeyfields){ 
  $indexarr=array(); 
  sortingkeyfieldsnr=count(sortingkeyfields);
  foreach($dataarr as $key=>$valarr) { 
    $currentindex=''; 
    foreach(sortingkeyfieldspos=0;sortingkeyfieldspos<sortingkeyfieldsnr;sortingkeyfieldspos++) $currentindex.= $valarr[sortingkeyfieldspos].'_'; 
    $indexarr[$currentindex]=$key; 
  } 
  return $indexarr; 
} 
function array_sortbyindex(&$dataarr,$indexarr,$issortindexbykey=true){ 
  // assumes complete index!: each item of indexarr must correlate a key of dataarr 
  $resultarr=array(); 
  if($issortindexbykey) ksort($indexarr); 
  foreach($indexarr as $datakey) $resultarr[$datakey]= $dataarr[$datakey]; 
  return $resultarr; 
} 

sortingkeyfields=array(0,2);
print_r(array_sortbyindex($dataarr, array_index($YOURARRAY,sortingkeyfields))); 
于 2013-08-14T13:22:41.893 回答