반응형
PHP에서 연관 배열 정렬
다음 형식의 배열이 있습니다.
Array
(
[0] => Array
(
[text] => tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 7480000
[lastMonthSearchVolume] => 9140000
)
[1] => Array
(
[text] => personality tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 165000
[lastMonthSearchVolume] => 201000
)
[2] => Array
(
[text] => online tests
[language] =>
[advertiserCompetitionScale] => 5
[avgSearchVolume] => 246000
[lastMonthSearchVolume] => 301000
)
)
해당 형식의 배열을 다음의 내림차순으로 정렬하려면 어떻게 해야 합니까?avgSearchVolume
필드? 이것을 위한 내장 기능이 있습니까?
주문을 수행하기 위해 사용자 자신의 기능을 사용하고 제공합니다.
function cmp($a, $b)
{
return $b['avgSearchVolume'] - $a['avgSearchVolume'];
}
usort($array, "cmp");
PHP 5.3 이전까지는 각 키에 대해 새로운 기능을 만들지 않고 하위 키를 기준으로 정렬할 수 있는 최고의 기능입니다.
function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
foreach ($array as $subarray) {
$keys[] = $subarray[$subkey];
}
array_multisort($keys, $sortType, $array);
}
sortBySubkey($arr, 'avgSearchVolume');
PHP 5.3을 사용하면 지금과 같은 함수 호출을 만들 수 있습니다.
function getSortVariable($sortType = SORT_ASC) {
switch($sortType) {
case SORT_ASC:
return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); };
}
}
function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
$sortFunction = getSortVariable($sortType);
usort($array, $sortFunction($subkey));
}
와 함께 사용자 지정 콜백 기능을 사용해야 합니다.
function cmp($a, $b)
{
if ($a['avgSearchVolume'] == $b['avgSearchVolume']) {
return 0;
}
return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1;
}
usort($array, 'cmp');
function querySort ($first_Array,$second_Array) {
return strcasecmp($first_Array['name'],$second_Array['name']);
}
echo '<pre>';
usort($main, 'querySort');
print_r($main);
die;
다른 솔루션이 있습니다. 정렬 옵션을 여러 개 추가할 수 있습니다(코드의 주석 부분 참조).
<?php
$arr=Array(
Array("text" => "tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 7480000,"lastMonthSearchVolume" => 9140000),
Array("text" => "personality tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 165000,"lastMonthSearchVolume"=>201000),
Array("text" => "online tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 246000,"lastMonthSearchVolume" =>301000)
);
$sort = array();
foreach($arr as $k=>$v) {
$sort['avgSearchVolume'][$k] = $v['avgSearchVolume'];
//$sort['text'][$k] = $v['text'];
}
array_multisort($sort['avgSearchVolume'], SORT_DESC, $arr);
//array_multisort($sort['avgSearchVolume'], SORT_DESC, $sort['text'], SORT_ASC,$arr);
echo "<pre>";
print_r($arr);
?>
참조: http://php.net/manual/en/function.array-multisort.php
언급URL : https://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php
반응형
'programing' 카테고리의 다른 글
판다 사용 두 개의 서로 다른 Excel 파일/시트 결합/합병 (0) | 2023.08.12 |
---|---|
메이븐 구성의 스프링 부트 (0) | 2023.08.12 |
CSS 셀렉터의 클래스 이름은 대소문자를 구분합니까? (0) | 2023.08.07 |
SOAP XML을 구문 분석하는 방법은 무엇입니까? (0) | 2023.08.07 |
Mariadbc 커넥터 mysql_real_connect 실패 오류(2002) [HY000] "소켓 '/tmp/mysql'을 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말' (2)" (0) | 2023.08.07 |