Massivlar — indeksli, assotsiativ, ko'p o'lchovli
Muammodan boshlaylik
Do'konda 50 ta mahsulot bor. Har biri uchun o'zgaruvchi yaratamizmi?
<?php
$mahsulot1 = "Telefon";
$mahsulot2 = "Noutbuk";
$mahsulot3 = "Quloqchin";
// ... $mahsulot50
Ularni sikl bilan chiqarib bo'lmaydi, sonini bilib bo'lmaydi, yangisini qo'shish uchun kodni o'zgartirish kerak. Bir turdagi ko'p ma'lumotni bitta joyda saqlash uchun — massiv bor.
PHP da massiv — eng ko'p ishlatiladigan tuzilma. Bazadan kelgan qatorlar, forma ma'lumotlari, JSON, konfiguratsiya — hammasi massiv.
Indeksli massiv
Elementlar tartib bilan, raqam (indeks) orqali saqlanadi:
<?php
$mahsulotlar = ["Telefon", "Noutbuk", "Quloqchin"];
echo $mahsulotlar[0]; // Telefon
echo $mahsulotlar[1]; // Noutbuk
echo $mahsulotlar[2]; // Quloqchin
[!INFO] Indeks 0 dan boshlanadi. Birinchi element —
[0], oxirgisi —[soni - 1].
Hayotiy o'xshatma: poyezd vagonlari. Har bir vagonda yuk bor, vagonlar raqamlangan. Faqat bu poyezdda birinchi vagon raqami — 0.
Element qo'shish va o'zgartirish
<?php
$mahsulotlar = ["Telefon", "Noutbuk"];
$mahsulotlar[] = "Planshet"; // oxiriga qo'shish
$mahsulotlar[0] = "Smartfon"; // o'zgartirish
print_r($mahsulotlar);
Array
(
[0] => Smartfon
[1] => Noutbuk
[2] => Planshet
)
print_r() — massivni o'qish uchun qulay ko'rinishda chiqaradi. var_dump() esa turlarini ham ko'rsatadi.
Elementlar soni
<?php
echo count($mahsulotlar); // 3
Assotsiativ massiv
Indeks o'rniga nomli kalit ishlatiladi:
<?php
$foydalanuvchi = [
"ism" => "Shahzod",
"email" => "shahzod@mail.uz",
"yosh" => 27,
"faol" => true,
];
echo $foydalanuvchi["ism"]; // Shahzod
echo $foydalanuvchi["email"]; // shahzod@mail.uz
=> — "kalit qiymatga ishora qiladi". Indeksli massivda [1] nima ekanini eslab qolish kerak; assotsiativda ["email"] — o'zi tushunarli.
Hayotiy o'xshatma: anketa. Har bir qatorda maydon nomi va qiymati bor.
<?php
$foydalanuvchi["telefon"] = "+998 90 123 45 67"; // yangi kalit qo'shish
$foydalanuvchi["yosh"] = 28; // mavjudini o'zgartirish
unset($foydalanuvchi["faol"]); // o'chirish
Kalit mavjudligini tekshirish
<?php
echo $foydalanuvchi["manzil"];
// Warning: Undefined array key "manzil"
// ✅ Xavfsiz usullar:
echo $foydalanuvchi["manzil"] ?? "Ko'rsatilmagan";
if (isset($foydalanuvchi["manzil"])) { ... } // mavjud va null emas
if (array_key_exists("manzil", $foydalanuvchi)) { ... } // mavjud (null bo'lsa ham)
Nima uchun shunday?
Boshqa tillarda "array" (ro'yxat) va "dictionary/map/object" (lug'at) — ikki xil narsa. PHP da nima uchun bitta?
PHP ichida massiv aslida tartiblangan lug'at (ordered hash map). Indeksli massiv — bu shunchaki kalitlari 0, 1, 2... bo'lgan lug'at. Shuning uchun ularni aralashtirish ham mumkin:
<?php
$aralash = ["olma", "rang" => "qizil", "nok"];
print_r($aralash);
// [0] => olma, [rang] => qizil, [1] => nok
Bu moslashuvchanlik PHP ni vebda qulay qilgan — bazadan kelgan qator ham, forma ham, JSON ham bitta tuzilmaga tushadi. Lekin amalda aralash massivlardan qoching — chalkashlik keltiradi.
Ko'p o'lchovli massivlar
Massiv ichida massiv. Eng ko'p uchraydigan holat — ro'yxatdagi yozuvlar (bazadan kelgan jadval kabi):
<?php
$mahsulotlar = [
["id" => 1, "nom" => "Telefon", "narx" => 3200000],
["id" => 2, "nom" => "Noutbuk", "narx" => 8900000],
["id" => 3, "nom" => "Quloqchin", "narx" => 249000],
];
echo $mahsulotlar[1]["nom"]; // Noutbuk
echo $mahsulotlar[2]["narx"]; // 249000
Avval qaysi qator ([1]), keyin qaysi ustun (["nom"]).
Lug'at ichida lug'at:
<?php
$sozlamalar = [
"db" => [
"host" => "localhost",
"nom" => "dokon",
],
"sayt" => [
"nom" => "Mening do'konim",
"til" => "uz",
],
];
echo $sozlamalar["db"]["host"]; // localhost
Massivni chiqarish
echo massivni chiqara olmaydi:
<?php
$ranglar = ["qizil", "yashil"];
echo $ranglar;
// Warning: Array to string conversion → "Array" chiqadi
Variantlar:
<?php
print_r($ranglar); // tuzilmani ko'rish (debug)
var_dump($ranglar); // turlar bilan (debug)
echo implode(", ", $ranglar); // qizil, yashil — foydalanuvchiga ko'rsatish
Brauzerda print_r ni chiroyli ko'rish uchun <pre> ga o'rang:
<?php
echo "<pre>";
print_r($mahsulotlar);
echo "</pre>";
Destructuring — massivdan o'zgaruvchilarga
<?php
$koordinata = [41.31, 69.28];
[$kenglik, $uzunlik] = $koordinata;
echo $kenglik; // 41.31
$user = ["ism" => "Ali", "yosh" => 30];
["ism" => $ism, "yosh" => $yosh] = $user;
echo $ism; // Ali
Ikki o'zgaruvchini almashtirish:
<?php
$a = 1;
$b = 2;
[$a, $b] = [$b, $a]; // endi $a = 2, $b = 1
Spread operatori ...
<?php
$mevalar = ["olma", "nok"];
$sabzavotlar = ["sabzi", "piyoz"];
$hammasi = [...$mevalar, ...$sabzavotlar];
// ["olma", "nok", "sabzi", "piyoz"]
Tez-tez uchraydigan xatolar
Indeks 1 dan boshlanadi deb o'ylash:
<?php
$kunlar = ["Dushanba", "Seshanba", "Chorshanba"];
echo $kunlar[3];
// Warning: Undefined array key 3
Kalitni qo'shtirnoqsiz yozish:
<?php
echo $user[ism];
// Error: Undefined constant "ism"
To'g'risi: $user["ism"] yoki $user['ism'].
String ichida massiv elementi:
<?php
echo "Ism: $user['ism']"; // ❌ Parse error
echo "Ism: {$user['ism']}"; // ✅
Xulosa
Eslab qoling:
- Indeksli:
["a", "b"], indeks 0 dan boshlanadi - Assotsiativ:
["kalit" => "qiymat"] $arr[] = x— oxiriga qo'shish,unset($arr['k'])— o'chirishcount()— soni;??vaisset()— xavfsiz o'qish- Ko'p o'lchovli:
$arr[qator][ustun] print_r/var_dump— debug uchun,implode— ko'rsatish uchun
Keyingi dars
12-dars: foreach — massiv ustida yurish, kalit => qiymat