Php 排序此数组的最快方法

Php 排序此数组的最快方法,php,arrays,sorting,Php,Arrays,Sorting,我正在尝试找出排序此数组的最快方法(即性能方面) 我想按每个数组中的第一个键按字母顺序排序 $results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4')); $results=array(array('foo','=','1')、array('dog','!=','5')、array('apple','p>)sort()函数按您的意愿工作: <?php $resu

我正在尝试找出排序此数组的最快方法(即性能方面)

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

$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));
$results=array(array('foo','=','1')、array('dog','!=','5')、array('apple','p>)sort()函数按您的意愿工作:

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


在5.2.17上测试,您可能会发现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函数对给定的第一个数组进行排序,然后使用键顺序对第二个数组进行排序。您可能可以在创建初始结果集的同一循环中创建排序数组


请参见此处了解更多信息:

usort和multisort相对较慢-这将成为一个痛苦>100 K记录。但是PHPs强度是关联数组。只需基于该核心函数构建索引并基于此应用快速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))); 
函数数组_索引($dataarr,sortingkeyfields){
$indexarr=array();
sortingkeyfieldsnr=计数(sortingkeyfields);
foreach($dataarr作为$key=>$valarr){
$currentindex='';

foreach(sortingkeyfieldspos=0;sortingkeyfieldsposkssort)在这里没有帮助,因为它对字符串(按键)进行排序,而不是按我在这里所做的那样进行数组排序:当然!PHP排序()函数从PHP 5开始就没有被修改过,使用Quicksort,这是最有名的排序算法。此外,如果第一个键不是字符串,并且希望将其作为字符串进行比较,则可以使用sort($array,sort\u string)。您可以阅读此内容以了解更多信息:。我不确定,但sort可以知道所有元素是否都是数组,如果是,则按第一个、第二个、第三个、然后…然后是最后一个元素进行排序…有趣的是,我不认为如果有多个数组,sort
将能够进行排序,这就是为什么我没有尝试的原因lol谢谢
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)));