PHP / Холбоот массив

Холбоот массив

Жагсаалт массив тоон индекс ашигладаг бол холбоот массив (associative array) нь мөр түлхүүр ашигладаг. $хүн[0] гэхийн оронд $хүн["нэр"] гэж бичнэ — утга нь илүү тодорхой, унших нь хялбар. Вэб хөгжүүлэлтэд хэрэглэгчийн мэдээлэл, тохиргоо, API хариулт зэргийг энэ хэлбэрт хадгалдаг.

Холбоот массив үүсгэх

php
<?php
// Үндсэн хэлбэр
$хүн = [
    "нэр"       => "Батбаяр",
    "нас"       => 28,
    "хот"       => "Улаанбаатар",
    "мэргэжил"  => "Backend хөгжүүлэгч",
    "premium"   => true,
];

// Элементэд хандах
echo $хүн["нэр"];       // Батбаяр
echo $хүн["нас"];       // 28

// Шинэ талбар нэмэх
$хүн["имэйл"] = "bat@example.mn";
$хүн["xp"]    = 1250;

// Утга өөрчлөх
$хүн["нас"] = 29;

// Байгаа эсэхийг шалгах
if (isset($хүн["имэйл"])) {
    echo "Имэйл байна: " . $хүн["имэйл"];
}

// Байхгүй түлхүүрт хандах аюулгүй арга
$утас = $хүн["утас"] ?? "тодорхойгүй";
echo $утас;   // тодорхойгүй
?>

foreach давталт

Холбоот массивыг давтахад $түлхүүр => $утга хэлбэрийг ашиглана:

php
<?php
$тохиргоо = [
    "db_host"    => "localhost",
    "db_name"    => "myapp",
    "db_port"    => 3306,
    "debug"      => false,
    "timezone"   => "Asia/Ulaanbaatar",
    "max_upload" => "10MB",
];

// Түлхүүр ба утга хоёуланг харуулах
foreach ($тохиргоо as $түлхүүр => $утга) {
    $харуулах = is_bool($утга)
        ? ($утга ? "true" : "false")
        : $утга;
    echo "$түлхүүр = $харуулах\n";
}

// Зөвхөн утгуудыг давтах
foreach ($тохиргоо as $утга) {
    echo $утга . "\n";
}

// Зөвхөн түлхүүрүүдийг авах
$түлхүүрүүд = array_keys($тохиргоо);
echo implode(", ", $түлхүүрүүд);
// db_host, db_name, db_port, debug, timezone, max_upload
?>

Холбоот массивын массив

Бодит амьдрал дахь өгөгдөл ихэвчлэн олон давхаргатай байдаг:

php
<?php
$бүтээгдэхүүнүүд = [
    [
        "id"    => 1,
        "нэр"  => "PHP сурах гарын авлага",
        "үнэ"  => 25000,
        "төрөл" => "ном",
    ],
    [
        "id"    => 2,
        "нэр"  => "Laravel курс",
        "үнэ"  => 79000,
        "төрөл" => "курс",
    ],
    [
        "id"    => 3,
        "нэр"  => "MySQL сурах бичиг",
        "үнэ"  => 18000,
        "төрөл" => "ном",
    ],
];

// Бүтээгдэхүүн бүрийг харуулах
foreach ($бүтээгдэхүүнүүд as $бүт) {
    echo "{$бүт['нэр']} — " . number_format($бүт['үнэ']) . " ₮\n";
}

// Тодорхой бүтээгдэхүүн хайх
foreach ($бүтээгдэхүүнүүд as $бүт) {
    if ($бүт["id"] === 2) {
        echo "Олдлоо: " . $бүт["нэр"];
        break;
    }
}

// Нийт үнэ тооцоолох
$нийт = array_sum(array_column($бүтээгдэхүүнүүд, "үнэ"));
echo number_format($нийт) . " ₮";   // 122,000 ₮
?>

Массив нэгтгэх ба шинэчлэх

php
<?php
$анхны = [
    "нэр"   => "Дорж",
    "нас"   => 25,
    "хот"   => "Дархан",
];

$шинэчлэл = [
    "хот"    => "Улаанбаатар",   // Давхардсан — шинэ утгаар дарна
    "имэйл" => "dorj@mail.mn",   // Шинэ талбар нэмнэ
];

// array_merge — хоёр массивыг нэгтгэнэ
$нэгтгэсэн = array_merge($анхны, $шинэчлэл);
print_r($нэгтгэсэн);
// нэр: Дорж, нас: 25, хот: Улаанбаатар, имэйл: dorj@mail.mn

// Spread оператор ашиглан нэгтгэх (PHP 8.1+)
$бүрэн = [...$анхны, ...$шинэчлэл];

// array_diff_key — зөвхөн зарим талбарыг хасах
$нийтэд_харуулах = array_diff_key($нэгтгэсэн, ["имэйл" => ""]);
print_r($нийтэд_харуулах);
// нэр, нас, хот л үлдэнэ
?>

Практик жишээ — хэлбэрийн өгөгдөл боловсруулах

php
<?php
// POST хэлбэрийн өгөгдөл дуурайх
$_POST = [
    "нэр"       => "  Батбаяр  ",
    "имэйл"    => "bat@EXAMPLE.MN",
    "нас"       => "25",
    "хот"       => "Улаанбаатар",
];

function хэлбэр_цэвэрлэх(array $өгөгдөл): array {
    return [
        "нэр"    => trim($өгөгдөл["нэр"]),
        "имэйл" => strtolower(trim($өгөгдөл["имэйл"])),
        "нас"    => (int) $өгөгдөл["нас"],
        "хот"   => trim($өгөгдөл["хот"]),
    ];
}

$цэвэр = хэлбэр_цэвэрлэх($_POST);
print_r($цэвэр);
// нэр: Батбаяр, имэйл: bat@example.mn, нас: 25, хот: Улаанбаатар
?>

Дараагийн хичээлд:

Массивын бэлэн функцүүдийг — array_map, array_filter, array_reduce, usort болон бусад — судална. Эдгээр функцүүд массивыг эрэмбэлэх, шүүх, хөрвүүлэхэд маш хүчирхэг хэрэгсэл юм.