2012-11-05 67 views
0

我想通过我已经建立了下面这个数据结构的柱(一个或多个)进行排序:在PHP数组排序列

$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 

这是$ entity_list数据结构的var_dump 。

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()?我想我应该使用kso​​rt(),因为它在一个键上工作。例如,我尝试过ksort($ entity_list,'student_last_name')或asort($ entity_list,'current_grade')。

谢谢。

+0

看起来像它来自一个数据库,使用数据库的排序选项。 – 2012-11-05 19:07:52

+0

我应该注意到,我从数据库中创建计算字段,我需要按...排序.... – jamesTheProgrammer

回答

4

您可以使用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; 
} 

但如果你的数据来自一个数据库,这将是一个极大的方便,打火机ORDER BY

1

您可以使用uasort()对于这一点,就像这样:

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

如果你可以使用MySQL做到这一点吧。或者尝试array_multisort()这样的:

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

最简单的方法是使用一个回调与uasort像这样

比方说,我在整理被称为timestamp列行业的数组...

uasort($trades, function ($a, $b) { 
    return ($a['timestamp'] > $b['timestamp'] ? 1 : -1); 
}); 
1
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; } 

不,不,野应!这很丑陋。

function mySort($a, $b) { 
    return $a['student_last_name'] - $b['student_last_name']; 
} 
0

从我所知道的或测试过的,php 5+对这个函数更稳定。

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