2012-11-05 66 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; 
     } 
    }