Kotchasan Framework Documentation

Kotchasan Framework Documentation

Country Class - การจัดการข้อมูลประเทศ

TH 07 Feb 2026 02:14

Country Class - การจัดการข้อมูลประเทศ

คลาส Country เป็นเครื่องมือสำหรับการจัดการข้อมูลประเทศต่างๆ ในกรอบงาน Kotchasan โดยรองรับการแสดงชื่อประเทศในหลายภาษา

namespace

Kotchasan\Country;

คุณสมบัติ

คลาส Country มีข้อมูลประเทศครบถ้วนพร้อมชื่อในภาษาไทย อังกฤษ และภาษาท้องถิ่น รองรับการใช้งานในระบบฟอร์มและการแสดงผล

เมธอดหลัก

get()

ดึงชื่อประเทศจากรหัส ISO

class ExampleClass {
    <?php
public static function get($iso): string;
}

Parameters:

  • $iso - รหัส ISO ของประเทศ (เช่น 'TH', 'US', 'JP')

Returns: ชื่อประเทศในภาษาปัจจุบัน หรือ string ว่างถ้าไม่พบ

ตัวอย่างการใช้งาน:

use Kotchasan\Country;

// ดึงชื่อประเทศตามภาษาปัจจุบัน
echo Country::get('TH'); // ไทย (ถ้าเป็นภาษาไทย) หรือ Thailand (ถ้าเป็นภาษาอังกฤษ)
echo Country::get('US'); // สหรัฐอเมริกา หรือ United States
echo Country::get('JP'); // ญี่ปุ่น หรือ Japan

// ตรวจสอบประเทศที่ไม่มีในระบบ
$country = Country::get('XX');
if (empty($country)) {
    echo 'ไม่พบประเทศนี้';
}

// ระบบแสดงข้อมูลผู้ใช้
function displayUserInfo($user) {
    return [
        'name' => $user['name'],
        'email' => $user['email'],
        'country' => Country::get($user['country_code']) ?: 'ไม่ระบุ',
        'country_code' => $user['country_code']
    ];
}

$user = [
    'name' => 'สมชาย ใจดี',
    'email' => 'somchai@example.com',
    'country_code' => 'TH'
];

$userInfo = displayUserInfo($user);
echo "ประเทศ: " . $userInfo['country']; // ประเทศ: ไทย;

all()

ดึงรายการประเทศทั้งหมด

class ExampleClass {
    <?php
public static function all(): array;
}

Returns: อาร์เรย์ของประเทศทั้งหมดโดยใช้รหัส ISO เป็น key และชื่อประเทศเป็น value

ตัวอย่างการใช้งาน:

use Kotchasan\Country;

// ดึงรายการประเทศทั้งหมด
$countries = Country::all();

// แสดงใน dropdown
echo '<select name="country">';
echo '<option value="">-- เลือกประเทศ --</option>';
foreach ($countries as $iso => $name) {
    echo "<option value=\"{$iso}\">{$name}</option>";
}
echo '</select>';

// ระบบค้นหาประเทศ
function searchCountries($keyword) {
    $countries = Country::all();
    $results = [];

    foreach ($countries as $iso => $name) {
        if (stripos($name, $keyword) !== false) {
            $results[$iso] = $name;
        }
    }

    return $results;
}

// การใช้งาน
$searchResults = searchCountries('เอเชีย');
foreach ($searchResults as $iso => $name) {
    echo "{$iso}: {$name}\n";
}

// ระบบฟอร์มลงทะเบียน
class RegistrationForm {
    public function getCountryOptions($selectedCountry = '') {
        $countries = Country::all();
        $options = '<option value="">-- เลือกประเทศ --</option>';

        foreach ($countries as $iso => $name) {
            $selected = ($iso === $selectedCountry) ? 'selected' : '';
            $options .= "<option value=\"{$iso}\" {$selected}>{$name}</option>";
        }

        return $options;
    }

    public function renderForm($data = []) {
        $countryOptions = $this->getCountryOptions($data['country'] ?? '');

        return "
        <form method='post'>
            <label>ชื่อ:</label>
            <input type='text' name='name' value='" . ($data['name'] ?? '') . "' required>

            <label>อีเมล:</label>
            <input type='email' name='email' value='" . ($data['email'] ?? '') . "' required>

            <label>ประเทศ:</label>
            <select name='country' required>
                {$countryOptions}
            </select>

            <button type='submit'>ลงทะเบียน</button>
        </form>";
    }
}

// การใช้งาน
$form = new RegistrationForm();
echo $form->renderForm(['country' => 'TH']);

// ระบบสถิติผู้ใช้ตามประเทศ
class UserStatistics {
    private $database;

    public function __construct($database) {
        $this->database = $database;
    }

    public function getCountryStats() {
        $stats = $this->database->createQuery()
            ->select('country_code', 'COUNT(*) as user_count')
            ->from('users')
            ->where(['country_code', '!=', ''])
            ->groupBy('country_code')
            ->orderBy('user_count DESC')
            ->toArray()
            ->execute();

        $countries = Country::all();
        $result = [];

        foreach ($stats as $stat) {
            $countryName = $countries[$stat['country_code']] ?? $stat['country_code'];
            $result[] = [
                'country_code' => $stat['country_code'],
                'country_name' => $countryName,
                'user_count' => $stat['user_count']
            ];
        }

        return $result;
    }

    public function renderStatsChart() {
        $stats = $this->getCountryStats();
        $html = '<div class="country-stats">';
        $html .= '<h3>สถิติผู้ใช้ตามประเทศ</h3>';
        $html .= '<table border="1">';
        $html .= '<tr><th>ประเทศ</th><th>จำนวนผู้ใช้</th></tr>';

        foreach ($stats as $stat) {
            $html .= "<tr>";
            $html .= "<td>{$stat['country_name']}</td>";
            $html .= "<td>{$stat['user_count']}</td>";
            $html .= "</tr>";
        }

        $html .= '</table>';
        $html .= '</div>';

        return $html;
    }
}

// ระบบ API ข้อมูลประเทศ
class CountryAPI {
    public function getCountry($iso) {
        $country = Country::get($iso);

        if (empty($country)) {
            return [
                'success' => false,
                'message' => 'ไม่พบประเทศที่ระบุ'
            ];
        }

        return [
            'success' => true,
            'data' => [
                'iso' => $iso,
                'name' => $country
            ]
        ];
    }

    public function getAllCountries($search = '') {
        $countries = Country::all();

        if (!empty($search)) {
            $filtered = [];
            foreach ($countries as $iso => $name) {
                if (stripos($name, $search) !== false || stripos($iso, $search) !== false) {
                    $filtered[$iso] = $name;
                }
            }
            $countries = $filtered;
        }

        return [
            'success' => true,
            'data' => $countries,
            'total' => count($countries)
        ];
    }

    public function handleRequest() {
        $action = $_GET['action'] ?? '';

        switch ($action) {
            case 'get':
                $iso = $_GET['iso'] ?? '';
                header('Content-Type: application/json');
                echo json_encode($this->getCountry($iso));
                break;

            case 'all':
                $search = $_GET['search'] ?? '';
                header('Content-Type: application/json');
                echo json_encode($this->getAllCountries($search));
                break;

            default:
                header('Content-Type: application/json');
                echo json_encode([
                    'success' => false,
                    'message' => 'ไม่รองรับการทำงานนี้'
                ]);
        }
    }
}

// การใช้งาน API
// GET /api/country.php?action=get&iso=TH
// GET /api/country.php?action=all&search=เอเชีย

$api = new CountryAPI();
$api->handleRequest();

// ระบบตรวจสอบและทำความสะอาดข้อมูล
class CountryValidator {
    public static function isValidCountryCode($code) {
        return !empty(Country::get($code));
    }

    public static function validateUserData($data) {
        $errors = [];

        if (empty($data['name'])) {
            $errors['name'] = 'กรุณาระบุชื่อ';
        }

        if (empty($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
            $errors['email'] = 'กรุณาระบุอีเมลที่ถูกต้อง';
        }

        if (empty($data['country']) || !self::isValidCountryCode($data['country'])) {
            $errors['country'] = 'กรุณาเลือกประเทศที่ถูกต้อง';
        }

        return [
            'valid' => empty($errors),
            'errors' => $errors,
            'data' => $data
        ];
    }

    public static function cleanCountryData($data) {
        if (isset($data['country'])) {
            $data['country'] = strtoupper(trim($data['country']));

            // ถ้าไม่ใช่รหัสประเทศที่ถูกต้อง ให้ลบออก
            if (!self::isValidCountryCode($data['country'])) {
                unset($data['country']);
            }
        }

        return $data;
    }
}

// การใช้งาน Validator
$userData = [
    'name' => 'สมชาย ใจดี',
    'email' => 'somchai@example.com',
    'country' => 'th' // จะถูกแปลงเป็น TH
];

$cleanData = CountryValidator::cleanCountryData($userData);
$validation = CountryValidator::validateUserData($cleanData);

if ($validation['valid']) {
    echo 'ข้อมูลถูกต้อง';
} else {
    foreach ($validation['errors'] as $field => $error) {
        echo "{$field}: {$error}\n";
    }
}

ตัวอย่างการใช้งานขั้นสูง

use Kotchasan\Database;

use Kotchasan\Country;

// ระบบจัดการข้อมูลประเทศแบบครบวงจร
class CountryManager {
    private $cache = [];

    public function getCountryInfo($iso) {
        if (!isset($this->cache[$iso])) {
            $name = Country::get($iso);
            if (!empty($name)) {
                $this->cache[$iso] = [
                    'iso' => $iso,
                    'name' => $name,
                    'flag_url' => $this->getFlagUrl($iso),
                    'region' => $this->getRegion($iso)
                ];
            } else {
                $this->cache[$iso] = null;
            }
        }

        return $this->cache[$iso];
    }

    private function getFlagUrl($iso) {
        return "/assets/flags/" . strtolower($iso) . ".png";
    }

    private function getRegion($iso) {
        $regions = [
            'TH' => 'Southeast Asia',
            'JP' => 'East Asia',
            'KR' => 'East Asia',
            'CN' => 'East Asia',
            'US' => 'North America',
            'GB' => 'Europe',
            'DE' => 'Europe',
            'FR' => 'Europe'
        ];

        return $regions[$iso] ?? 'Unknown';
    }

    public function getCountriesByRegion($region) {
        $countries = Country::all();
        $result = [];

        foreach ($countries as $iso => $name) {
            $info = $this->getCountryInfo($iso);
            if ($info && $info['region'] === $region) {
                $result[$iso] = $info;
            }
        }

        return $result;
    }

    public function renderCountrySelector($selectedCountry = '', $options = []) {
        $countries = Country::all();
        $showFlags = $options['show_flags'] ?? false;
        $groupByRegion = $options['group_by_region'] ?? false;

        $html = '<select name="country" class="country-selector">';
        $html .= '<option value="">-- เลือกประเทศ --</option>';

        if ($groupByRegion) {
            $regions = [];
            foreach ($countries as $iso => $name) {
                $info = $this->getCountryInfo($iso);
                if ($info) {
                    $regions[$info['region']][$iso] = $info;
                }
            }

            foreach ($regions as $regionName => $regionCountries) {
                $html .= "<optgroup label=\"{$regionName}\">";
                foreach ($regionCountries as $iso => $info) {
                    $selected = ($iso === $selectedCountry) ? 'selected' : '';
                    $flag = $showFlags ? "🏳️ " : "";
                    $html .= "<option value=\"{$iso}\" {$selected}>{$flag}{$info['name']}</option>";
                }
                $html .= "</optgroup>";
            }
        } else {
            foreach ($countries as $iso => $name) {
                $selected = ($iso === $selectedCountry) ? 'selected' : '';
                $flag = $showFlags ? "🏳️ " : "";
                $html .= "<option value=\"{$iso}\" {$selected}>{$flag}{$name}</option>";
            }
        }

        $html .= '</select>';

        return $html;
    }
}

// ระบบข้อมูลผู้ใช้นานาชาติ
class InternationalUserSystem {
    private $countryManager;
    private $database;

    public function __construct($database) {
        $this->countryManager = new CountryManager();
        $this->database = $database;
    }

    public function createUser($userData) {
        // ตรวจสอบข้อมูลประเทศ
        $countryInfo = $this->countryManager->getCountryInfo($userData['country']);
        if (!$countryInfo) {
            throw new \InvalidArgumentException('รหัสประเทศไม่ถูกต้อง');
        }

        // เพิ่มข้อมูลประเทศเต็ม
        $userData['country_name'] = $countryInfo['name'];
        $userData['region'] = $countryInfo['region'];
        $userData['created_at'] = date('Y-m-d H:i:s');

        // บันทึกในฐานข้อมูล
        return $this->database->createQuery()
            ->insert('users')
            ->values($userData)
            ->execute();
    }

    public function getUsersByCountry($countryCode) {
        return $this->database->createQuery()
            ->select()
            ->from('users')
            ->where(['country', $countryCode])
            ->orderBy('created_at DESC')
            ->toArray()
            ->execute();
    }

    public function getRegionalStatistics() {
        $stats = $this->database->createQuery()
            ->select('region', 'COUNT() as user_count')
            ->from('users')
            ->where(['region', '!=', ''])
            ->groupBy('region')
            ->orderBy('user_count DESC')
            ->toArray()
            ->execute();

        return $stats;
    }

    public function generateCountryReport() {
        $countries = Country::all();
        $report = [];

        foreach ($countries as $iso => $name) {
            $userCount = $this->database->createQuery()
                ->select('COUNT(*) as count')
                ->from('users')
                ->where(['country', $iso])
                ->first();

            $countryInfo = $this->countryManager->getCountryInfo($iso);

            $report[] = [
                'iso' => $iso,
                'name' => $name,
                'user_count' => $userCount ? $userCount->count : 0,
                'region' => $countryInfo ? $countryInfo['region'] : 'Unknown'
            ];
        }

        // เรียงตามจำนวนผู้ใช้
        usort($report, function($a, $b) {
            return $b['user_count'] - $a['user_count'];
        });

        return $report;
    }
}

// การใช้งานระบบ
$database = \Kotchasan\Database::create();
$userSystem = new InternationalUserSystem($database);

// สร้างผู้ใช้ใหม่
try {
    $newUser = [
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'country' => 'US'
    ];

    $userId = $userSystem->createUser($newUser);
    echo "สร้างผู้ใช้สำเร็จ ID: {$userId}";

} catch (Exception $e) {
    echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}

// ดูสถิติตามภูมิภาค
$regionalStats = $userSystem->getRegionalStatistics();
foreach ($regionalStats as $stat) {
    echo "{$stat['region']}: {$stat['user_count']} users\n";
}

// สร้างรายงานประเทศ
$countryReport = $userSystem->generateCountryReport();
foreach (array_slice($countryReport, 0, 10) as $country) {
    echo "{$country['name']}: {$country['user_count']} users\n";
}

หมายเหตุการใช้งาน

  1. การรองรับภาษา: แสดงชื่อประเทศตามภาษาปัจจุบันของระบบ
  2. ข้อมูลครบถ้วน: มีข้อมูลประเทศทั่วโลกพร้อมชื่อในภาษาท้องถิ่น
  3. การใช้งาน: เหมาะสำหรับฟอร์มและระบบที่ต้องการเลือกประเทศ
  4. Performance: ข้อมูลถูกจัดเก็บในรูปแบบ static array เพื่อความเร็ว
  5. มาตรฐาน: ใช้รหัส ISO 3166-1 alpha-2

คลาส Country เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจัดการข้อมูลประเทศในกรอบงาน Kotchasan เหมาะสำหรับระบบที่ต้องการรองรับผู้ใช้นานาชาติ