我试图找出对这个数组进行排序的最快方法(即表现明智)。
我希望按每个数组中的第一个键按字母顺序排序...
$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));
排序后看起来像......
$results = array(array('apple', '<', '4'), array('dog', '!=', '5'), array('foo', '=', '1'));
有什么想法吗?
答案 0 :(得分: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上测试
答案 1 :(得分: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
答案 2 :(得分:0)
usort和multisort相对较慢 - 这将成为一个痛苦的&gt; 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)));