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)));