📖
PHP 확장형 정렬 코드 (여러 키워드 우선순위 지정)
페이지 정보
본문
정렬 기준 usort() 함수로 정렬
1순위 특정 channelid (test1, test2)
2순위 channelname에 "트로트", "발라드", "EDM"이 포함된 순서대로
그 외 나머지 채널들[code]$channels = $data['channel'];
// 1. 우선 channelid 우선순위 지정
$priority_ids = ['test1', 'test2'];
// 2. 우선 keyword 우선순위 지정 (앞일수록 우선순위 높음)
$priority_keywords = ['트로트', '발라드', 'EDM'];
// 3. 정렬
usort($channels, function($a, $b) use ($priority_ids, $priority_keywords) {
// --- channelid 우선순위 비교 ---
$a_id = array_search($a['channelid'], $priority_ids);
$b_id = array_search($b['channelid'], $priority_ids);
$a_id = $a_id === false ? PHP_INT_MAX : $a_id;
$b_id = $b_id === false ? PHP_INT_MAX : $b_id;
if ($a_id !== $b_id) {
return $a_id - $b_id;
}
// --- 키워드 우선순위 비교 ---
$a_kw = PHP_INT_MAX;
$b_kw = PHP_INT_MAX;
foreach ($priority_keywords as $i => $kw) {
if (stripos($a['channelname'], $kw) !== false && $a_kw === PHP_INT_MAX) $a_kw = $i;
if (stripos($b['channelname'], $kw) !== false && $b_kw === PHP_INT_MAX) $b_kw = $i;
}
return $a_kw - $b_kw;
});[/code]
✅ 정렬 우선순위를 다중 기준으로 구성
1. 특정 channelid 우선 (test1, test2)
2. channelname에 키워드 포함 (트로트, 발라드, EDM)
3. 청취자 수(listeners) 많은 순
4. 타이틀 길이 긴 순
5. viewimage 있는 채널 우선
✅ 적용 코드[code]if ($data['result'] == 'ok') {
$channels = $data['channel'];
$priority_ids = ['test1', 'test2'];
$priority_keywords = ['트로트', '발라드', 'EDM'];
usort($channels, function($a, $b) use ($priority_ids, $priority_keywords) {
// 1. ID 우선순위
$a_id = array_search($a['channelid'], $priority_ids);
$b_id = array_search($b['channelid'], $priority_ids);
$a_id = $a_id === false ? PHP_INT_MAX : $a_id;
$b_id = $b_id === false ? PHP_INT_MAX : $b_id;
if ($a_id !== $b_id) return $a_id - $b_id;
// 2. 키워드 우선순위
$a_kw = $b_kw = PHP_INT_MAX;
foreach ($priority_keywords as $i => $kw) {
if (stripos($a['channelname'], $kw) !== false && $a_kw === PHP_INT_MAX) $a_kw = $i;
if (stripos($b['channelname'], $kw) !== false && $b_kw === PHP_INT_MAX) $b_kw = $i;
}
if ($a_kw !== $b_kw) return $a_kw - $b_kw;
// 3. 청취자 수 많은 순 (내림차순)
if ($a['listeners'] !== $b['listeners']) return $b['listeners'] - $a['listeners'];
// 4. 타이틀 길이 (길수록 우선)
$a_len = mb_strlen($a['title']);
$b_len = mb_strlen($b['title']);
if ($a_len !== $b_len) return $b_len - $a_len;
// 5. 이미지 유무 (viewimage 있는 쪽 우선)
$a_img = empty($a['viewimage']) ? 1 : 0;
$b_img = empty($b['viewimage']) ? 1 : 0;
return $a_img - $b_img;
});[/code]
✅ 요약 정렬 로직 흐름
우선순위
1. channelid 지정된 채널 맨 위에 배치
2. channelname 키워드 포함 트로트, 발라드, EDM 순서대로
3. listeners 청취자 많은 순
4. title 길이 제목 긴 순
5. viewimage 유무 이미지 있는 채널 우선
1순위 특정 channelid (test1, test2)
2순위 channelname에 "트로트", "발라드", "EDM"이 포함된 순서대로
그 외 나머지 채널들[code]$channels = $data['channel'];
// 1. 우선 channelid 우선순위 지정
$priority_ids = ['test1', 'test2'];
// 2. 우선 keyword 우선순위 지정 (앞일수록 우선순위 높음)
$priority_keywords = ['트로트', '발라드', 'EDM'];
// 3. 정렬
usort($channels, function($a, $b) use ($priority_ids, $priority_keywords) {
// --- channelid 우선순위 비교 ---
$a_id = array_search($a['channelid'], $priority_ids);
$b_id = array_search($b['channelid'], $priority_ids);
$a_id = $a_id === false ? PHP_INT_MAX : $a_id;
$b_id = $b_id === false ? PHP_INT_MAX : $b_id;
if ($a_id !== $b_id) {
return $a_id - $b_id;
}
// --- 키워드 우선순위 비교 ---
$a_kw = PHP_INT_MAX;
$b_kw = PHP_INT_MAX;
foreach ($priority_keywords as $i => $kw) {
if (stripos($a['channelname'], $kw) !== false && $a_kw === PHP_INT_MAX) $a_kw = $i;
if (stripos($b['channelname'], $kw) !== false && $b_kw === PHP_INT_MAX) $b_kw = $i;
}
return $a_kw - $b_kw;
});[/code]
✅ 정렬 우선순위를 다중 기준으로 구성
1. 특정 channelid 우선 (test1, test2)
2. channelname에 키워드 포함 (트로트, 발라드, EDM)
3. 청취자 수(listeners) 많은 순
4. 타이틀 길이 긴 순
5. viewimage 있는 채널 우선
✅ 적용 코드[code]if ($data['result'] == 'ok') {
$channels = $data['channel'];
$priority_ids = ['test1', 'test2'];
$priority_keywords = ['트로트', '발라드', 'EDM'];
usort($channels, function($a, $b) use ($priority_ids, $priority_keywords) {
// 1. ID 우선순위
$a_id = array_search($a['channelid'], $priority_ids);
$b_id = array_search($b['channelid'], $priority_ids);
$a_id = $a_id === false ? PHP_INT_MAX : $a_id;
$b_id = $b_id === false ? PHP_INT_MAX : $b_id;
if ($a_id !== $b_id) return $a_id - $b_id;
// 2. 키워드 우선순위
$a_kw = $b_kw = PHP_INT_MAX;
foreach ($priority_keywords as $i => $kw) {
if (stripos($a['channelname'], $kw) !== false && $a_kw === PHP_INT_MAX) $a_kw = $i;
if (stripos($b['channelname'], $kw) !== false && $b_kw === PHP_INT_MAX) $b_kw = $i;
}
if ($a_kw !== $b_kw) return $a_kw - $b_kw;
// 3. 청취자 수 많은 순 (내림차순)
if ($a['listeners'] !== $b['listeners']) return $b['listeners'] - $a['listeners'];
// 4. 타이틀 길이 (길수록 우선)
$a_len = mb_strlen($a['title']);
$b_len = mb_strlen($b['title']);
if ($a_len !== $b_len) return $b_len - $a_len;
// 5. 이미지 유무 (viewimage 있는 쪽 우선)
$a_img = empty($a['viewimage']) ? 1 : 0;
$b_img = empty($b['viewimage']) ? 1 : 0;
return $a_img - $b_img;
});[/code]
✅ 요약 정렬 로직 흐름
우선순위
1. channelid 지정된 채널 맨 위에 배치
2. channelname 키워드 포함 트로트, 발라드, EDM 순서대로
3. listeners 청취자 많은 순
4. title 길이 제목 긴 순
5. viewimage 유무 이미지 있는 채널 우선
댓글목록
등록된 댓글이 없습니다.
![]() ![]() |