1/04/2016

[PHP] php에서 배열/다차원 배열 정렬하기(sorting array in php)

PHP에서 배열을 정렬하기란 매우 간단합니다.
일단 Lib에서 제공하는 함수들이 있어 쉽게 정렬이 가능하지요. 많이 쓰이는 것만 추려보면 아래와 같습니다.

  • arsort() : 내림차순 정렬 및 인덱스 관계 유지
  • asort() : 오름차순 정렬 및 인덱스 관계 유지
  • ksort() : 키 기반 정렬
  • krsort() : 키 기반 역순 정렬
  • sort() : 정렬
  • rsort() : 역순 정렬

이친구들은 각각 역할을 가지고 배열을 정렬할 때 사용되는 함수입니다.
대체로 정렬에 key 값을 가지고 정렬을 하기 때문에 ksort, krsort가 많이 사용됩니다.

rsort 사용 예제를 보면 인자값으로 배열을 넘겨주면 정렬하여 해당 배열을 재 배열합니다.
그래서 foreach 문으로 루프를 돌며 정렬된 데이터를 확인하면, 정렬된 것을 확인할 수 있지요.

<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
?>
// by php.net
1차원 배열의 경우는 이렇게 제공되는 함수를 사용하거나 간단하게 직접 만들어서 사용하면 편합니다. (학생 때 정렬 알고리즘 했던게 생각나네요)

그러나 2차원 배열은 기존 방법으로는 정렬이 어렵지요.
이유는 간단합니다. 같은 행에 있는 데이터를 어떻게 데리고 갈 것인가가 문제가 됩니다.
PHP에서 제공되는 함수는 기본적으로 1차원 배열을 기준으로 만들어진 함수이기 때문에 약간의 트릭을 이용하여 2차원 배열을 정렬해야 합니다.

일단 이 부분은 "array_multisort()" 함수를 제공해주기 때문에 어렵지 않게 완료할 수 있지만 상황에 따라 직접 코딩이 필요한 경우도 있습니다.

물론 검색하다보니 저랑 비슷한 고민을 하신분들이 있었고, KLDP에서 원하는 답을 찾을 수 있었습니다. 역시 이곳은 좋은 곳인듯..

없을걸요.. 함수를
글쓴이: kall 작성 일시: 월, 2006/06/19 - 11:59오전
없을걸요..

함수를 대충 만들어 쓰는 수 밖에는..
function tmpsort($a,$i)
{
  $ret = array();
  foreach( $a as $t )
  {
    $ret[$t[$i]] = $t;
  }
  ksort($ret);
  reset($ret);
  return array_values($ret);
}
이런식으로 간단한 형태로 정렬하는 함수를 만들어주셨고, 상황에 맞게 변형하여 사용하면 됩니다.

function Arraysort($a,$i)
{
  $ret = array();
  foreach( $a as $key => $t )
  {
    $ret[$t[$i].$key] = $t;
  }
  krsort($ret);
  reset($ret);
//rsort($ret);
  return array_values($ret);
}
?>
key 기준으로 역순으로 정렬하도록 구성하였습니다.

Reference

https://kldp.org/node/71285
http://php.net/manual/kr/function.rsort.php


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

3 comments: