배열 안에서 2중 정렬을 하려는 경우에 유효한 함수

배열 안에서 2중 정렬을 하려는 경우에 유효한 함수
를 소개한다.

http://jp2.php.net/manual/ja/function.array-multisort.php 로부터 인용.

------------

php a-t-the-r-a-t-e chir.ag
06-Jan-2006 07:10
Re: phu at kungphu, 19-Dec-2005 11:36

asort($test) will not let me specify which columns to sort ASC/DESC, NUMERIC/STRING etc.

I have data similar to what you specified. Now I want to sort $test by points DESC and name ASC. Here's my function that does it, based on suggestions on this page. It uses array_multisort (and hence acts just like it: preserving string-keys etc.)


function arrayColumnSort()
{
$n = func_num_args();
$ar = func_get_arg($n-1);
if(!is_array($ar))
return false;

for($i = 0; $i < $n-1; $i++)
$col[$i] = func_get_arg($i);

foreach($ar as $key => $val)
foreach($col as $kkey => $vval)
if(is_string($vval))
${"subar$kkey"}[$key] = $val[$vval];

$arv = array();
foreach($col as $key => $val)
$arv[] = (is_string($val) ? ${"subar$key"} : $val);
$arv[] = $ar;

call_user_func_array("array_multisort", $arv);
return $ar;
}

$test["pete"]['points']=1;
$test["pete"]['name']='Peter';

$test["mike"]['points']=5;
$test["mike"]['name']='Mike';

$test["zoo"]['points']=2;
$test["zoo"]['name']='John Zoo';

$test["ab"]['points']=2;
$test["ab"]['name']='John Ab';

$test1 = $test;

asort($test1);

$test2 = arrayColumnSort("points", SORT_DESC, SORT_NUMERIC, "name", SORT_ASC, SORT_STRING, $test);

print_r($test1); // asort
print_r($test2); // arrayColumnSort

?>



Output from asort:

Array
(
[pete] => Array
(
[points] => 1
[name] => Peter
)

[ab] => Array
(
[points] => 2
[name] => John Ab
)

[zoo] => Array
(
[points] => 2
[name] => John Zoo
)

[mike] => Array
(
[points] => 5
[name] => Mike
)

)

Output from arrayColumnSort:

Array
(
[mike] => Array
(
[points] => 5
[name] => Mike
)

[ab] => Array
(
[points] => 2
[name] => John Ab
)

[zoo] => Array
(
[points] => 2
[name] => John Zoo
)

[pete] => Array
(
[points] => 1
[name] => Peter
)

)

by 혼수상태 | 2009/01/27 23:04 | 트랙백

트랙백 주소 : http://isma44.egloos.com/tb/4827111
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
※ 로그인 사용자만 덧글을 남길 수 있습니다.

◀ 이전 페이지 다음 페이지 ▶