SortColumn

การเรียงลำดับแอเรย์หลายมิติ เช่น แอเรย์ข้อมูลของ webboard text ที่ผมใช้งานอยู่ หรือมีลักษณะดังโค้ด

<?
  $webboard[] = array( 'wb_id'=>4 , 'wb_topic'=> 'topic1' );
  $webboard[] = array( 'wb_id'=>5 , 'wb_topic'=> 'topic2' );
  $webboard[] = array( 'wb_id'=>2 , 'wb_topic'=> 'topic3' );
  $webboard[] = array( 'wb_id'=>1 , 'wb_topic'=> 'topic4' );
?>

$array = แอเรย์ของข้อมูล ที่ข้อมูลต้องเป็นแอเรย์ที่มีสมาชิกไม่น้อยกว่า $column
$column = สมาชิกของตัวแปรลำดับที่ต้องการใช้เปรียบเทียบ
$sortasc = เรียงลำดับจากน้อยไปหามาก (true)
$first, $last ตัวแปรสองตัวนี้เรียกครั้งแรกไม่ต้องใส่

function sortcolumn(&$array, $column=0, $sortasc=true, $first=0, $last= -2)
{
  $keys = array_keys($array);
  if($last == -2) $last = count($array) - 1;
  if($last > $first) {
  $alpha = $first;
  $omega = $last;
  $key_alpha = $keys[$alpha];
  $key_omega = $keys[$omega];
  $guess = $array[$key_alpha][$column];
  while($omega >= $alpha) {
    if($sortasc) {
   while($array[$key_alpha][$column] < $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
   while($array[$key_omega][$column] > $guess) {$omega--; $key_omega = $keys[$omega]; }
    } else {
   while($array[$key_alpha][$column] > $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
   while($array[$key_omega][$column] < $guess) {$omega--; $key_omega = $keys[$omega]; }
    }
    if($alpha > $omega) break;
    $temporary = $array[$key_alpha];
    $array[$key_alpha] = $array[$key_omega];
    $alpha++;
    $key_alpha = $keys[$alpha];
    $array[$key_omega] = $temporary;
    $omega--;
    $key_omega = $keys[$omega];
    }
  sortcolumn($array, $column, $sortasc, $first, $omega);
  sortcolumn($array, $column, $sortasc, $alpha, $last);
  }
};

การเรียงลำดับแอเรย์ตามชื่อฟิลด์ครับ โดยการกำหนด ค่า $name เป็นชื่อของฟิลด์ที่จะใช้เป็น key เช่น

sortcolumn( $webboard , 'wb_id' );

ตัวอย่าง เป็นการเรียงลำดับข้อมูลในแอเรย์ webboard ตาม id จากข้อมูลข้างบน

<?
  sortcolumn( $webboard , 'wb_id' );
  print_r( $webboard );
?>

ผู้เขียน goragod โพสต์เมื่อ 02 เม.ย. 2551 เปิดดู 8,905 ป้ายกำกับ PHPArray
^