📖
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 유무 이미지 있는 채널 우선

댓글목록

등록된 댓글이 없습니다.


자료 목록
번호 제목 날짜
184
🫧
05-01
183
🫧
04-30
182
🫧
04-30
181
🫧
04-28
180
🫧
04-27
179
🫧
04-26
178
🫧
04-26
177
🫧
04-24
📖
🫧
04-23
175
🫧
04-23
174
🫧
04-22
173
🫧
04-17
172
🫧
04-17
171
🫧
04-16
170
🫧
04-15

🔍 검색

회사소개 개인정보처리방침 서비스이용약관
Copyright © rainbowgarden.shop All rights reserved.