在PHP数组中对列进行排序
我正在尝试按以下数据结构中的列进行排序,我是这样构建的:在PHP数组中对列进行排序,php,arrays,asort,ksort,Php,Arrays,Asort,Ksort,我正在尝试按以下数据结构中的列进行排序,我是这样构建的: $counter = 1; $entity_list = array(); foreach($result as $rec){ $entity_list[$counter]['student_first_name'] = $rec->firstname; $entity_list[$counter]['student_last_name'] = $rec->lastname; $entity_list
$counter = 1;
$entity_list = array();
foreach($result as $rec){
$entity_list[$counter]['student_first_name'] = $rec->firstname;
$entity_list[$counter]['student_last_name'] = $rec->lastname;
$entity_list[$counter]['course_name'] = $rec->fullname;
.
.
$counter++;
}//end foreach
function cmp($a, $b) {
$sortby = 'student_last_name'; //define here the field by which you want to sort
return strcmp($a[$sortby] , $b[$sortby]);
}
uasort($array, 'cmp');
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
这是$entity\u列表数据结构的var\u转储
array (size=150)
1 =>
array (size=3)
'student_first_name' => string 'Jane' (length=6)
'student_last_name' => string 'Smith' (length=7)
'course_name' => string 'Algebra 1A-MOD' (length=14)
2 =>
array (size=3)
'student_first_name' => string 'Fred' (length=6)
'student_last_name' => string 'Jones' (length=7)
'course_name' => string 'Algebra 1A-MOD' (length=14)
.
.
.
如何在此结构上使用asort()或ksort()?我想我应该使用ksort(),因为它对键起作用。例如,我试过ksort($entity_list,'student_last_name')或asort($entity_list,'current_grade')
谢谢。您可以使用uasort
uasort($entity_list, 'mySort');
function mySort($a, $b) {
if($a['student_last_name'] == $b['student_last_name']) {
return 0;
}
return ($a['student_last_name'] < $b['student_last_name']) ? -1 : 1;
}
uasort($entity_list,'mySort');
函数mySort($a,$b){
如果($a['student\u last\u name']=$b['student\u last\u name'])){
返回0;
}
报税表($a['student\u last\u name']<$b['student\u last\u name'])?-1:1;
}
但是,如果您的数据来自DB,则按您可以使用的方式进行排序将更容易、更轻松,如下所示:
$counter = 1;
$entity_list = array();
foreach($result as $rec){
$entity_list[$counter]['student_first_name'] = $rec->firstname;
$entity_list[$counter]['student_last_name'] = $rec->lastname;
$entity_list[$counter]['course_name'] = $rec->fullname;
.
.
$counter++;
}//end foreach
function cmp($a, $b) {
$sortby = 'student_last_name'; //define here the field by which you want to sort
return strcmp($a[$sortby] , $b[$sortby]);
}
uasort($array, 'cmp');
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
如果你能使用MySQL,就用它来做这个。或者像这样尝试:
$counter = 1;
$entity_list = array();
foreach($result as $rec){
$entity_list[$counter]['student_first_name'] = $rec->firstname;
$entity_list[$counter]['student_last_name'] = $rec->lastname;
$entity_list[$counter]['course_name'] = $rec->fullname;
.
.
$counter++;
}//end foreach
function cmp($a, $b) {
$sortby = 'student_last_name'; //define here the field by which you want to sort
return strcmp($a[$sortby] , $b[$sortby]);
}
uasort($array, 'cmp');
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
最简单的方法是像这样使用带有uasort的回调 假设我正在按一个名为timestamp的列对一系列交易进行排序
uasort($trades, function ($a, $b) {
return ( $a['timestamp'] > $b['timestamp'] ? 1 : -1 );
});
从我所知道的或者已经测试过的情况来看,PHP5+对于这个函数来说更稳定
function orderBy($data=NULL,$field='order',$order='asc')
{
if (!is_null($data)) {
define('FIELD_TARGET',$field); define('ORDER_DIRECTION',$order);
usort($data,function($a, $b) {
if (ORDER_DIRECTION == 'desc') { return ($b[''.FIELD_TARGET.''] - $a[''.FIELD_TARGET.'']); }
else { return ($a[''.FIELD_TARGET.''] - $b[''.FIELD_TARGET.'']); }
}); return $data;
}
}
它可能适用于常见情况 PHP 5.4>
function arraySortByCol(&$arr, $col, $dir = 'asc')
{
usort($arr,function($a,$b) use ($col, $dir) {
return ($dir === 'asc')
? strcmp($a[$col], $b[$col])
: strcmp($b[$col], $a[$col]);
});
}
PHP 7>
function arraySortByCol(&$arr, $col, $dir = 'asc')
{
usort($arr,function($a,$b) use ($col, $dir) {
return ($dir === 'asc')
? $a[$col] <=> $b[$col]
: $b[$col] <=> $a[$col];
});
}
函数arraySortByCol(&$arr,$col,$dir='asc')
{
usort($arr,function($a,$b)use($col,$dir){
返回($dir=='asc')
?$a[$col]$b[$col]
:$b[$col]$a[$col];
});
}
看起来它来自数据库,请使用数据库的排序选项。我应该注意,我正在从数据库创建计算字段,我需要根据这些字段进行排序。。。。