2

次のように構築した次のデータ構造の列で並べ替えようとしています。

 $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() を使用するにはどうすればよいですか? キーで機能するため、ksort()を使用する必要があると思います。たとえば、ksort($entity_list,'student_last_name') または asort($entity_list,'current_grade') を試しました。

ありがとうございました。

4

7 に答える 7

6

uasortを使用できます

uasort($entity_list, 'mySort');

function mySort($a, $b) {
    return ($a['student_last_name'] <==> $b['student_last_name']);
}

ただし、データがDBからのものである場合は、 ORDERBYの方がはるかに簡単で軽量です。

于 2012-11-05T19:11:21.903 に答える
2
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'];
}
于 2014-03-25T11:51:55.663 に答える
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');
于 2012-11-05T19:13:31.697 に答える
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);
于 2012-11-05T19:14:33.857 に答える