Məzmuna keç
Educora
Başlanğıc16 dəq4 / 10

Massivlər və foreach

İndeksli, assosiativ və çoxölçülü massivlər yarat, onları foreach ilə gəz, sırala və massivləri parçalayıb birləşdirməyi öyrən.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • İndeksli, assosiativ və çoxölçülü massivlər yaratmaq və onların elementlərinə müraciət etmək
  • foreach ilə massivləri gəzmək və count, implode, array_column kimi funksiyalardan istifadə etmək
  • Massivləri sıralamaq, parçalamaq (destructuring) və ... ilə birləşdirmək

Sinifdə 25 şagird var və hər birinin qiymətlərini saxlamaq lazımdır. 25 ayrı dəyişən yaratmaq? Əlbəttə, yox. Belə hallarda massiv işə yarayır — bir adın altında çoxlu qiymət saxlayan struktur. PHP-də massiv həm siyahı, həm də lüğət rolunu oynayır, ona görə də massivə demək olar ki, hər skriptdə rast gəlinir.

İndeksli massivlər

Massiv kvadrat mötərizələrlə yaradılır: ["Baku", "Ganja"]. Elementlər 0-dan başlayan indekslərlə nömrələnir. $cities[] = ... yazılışı massivin sonuna yeni element əlavə edir, count elementlərin sayını, print_r isə massivin bütün məzmununu göstərir.

PHP
<?php

$cities = ["Baku", "Ganja", "Sumgait"];
$cities[] = "Shaki";

echo $cities[0], "\n";
echo count($cities), "\n";
echo $cities[count($cities) - 1], "\n";
print_r($cities);
echo implode(", ", $cities), "\n";
Gözlənilən nəticə
Baku
4
Shaki
Array
(
    [0] => Baku
    [1] => Ganja
    [2] => Sumgait
    [3] => Shaki
)
Baku, Ganja, Sumgait, Shaki

implode massivin elementlərini göstərilən ayırıcı ilə bir sətirdə birləşdirir, explode isə əksini edir: sətri ayırıcıya görə massivə bölür. Mövcud olmayan indeksə müraciət etsən, PHP 8 Undefined array key xəbərdarlığı verəcək və null qaytaracaq.

Assosiativ massivlər və foreach

Assosiativ massivdə nömrələr əvəzinə mənalı açarlar işlədilir: "name" => "Leyla". Bu, bir obyekt haqqında məlumatı saxlamaq üçün əlverişlidir. **foreach** dövrü massivin hər elementindən keçir: foreach ($arr as $value) yalnız qiymətləri, foreach ($arr as $key => $value) isə açarları da verir. Açarın mövcudluğunu isset və ya array_key_exists ilə yoxlayırlar.

PHP
<?php

$student = [
    "name" => "Leyla",
    "age" => 14,
    "city" => "Baku",
];
$student["grade"] = 8;

echo "{$student['name']} is {$student['age']} years old\n";
var_dump(isset($student["email"]));
var_dump(array_key_exists("city", $student));

foreach ($student as $key => $value) {
    echo "$key: $value\n";
}
Gözlənilən nəticə
Leyla is 14 years old
bool(false)
bool(true)
name: Leyla
age: 14
city: Baku
grade: 8

Çoxölçülü massivlər

Massivin elementi başqa massiv də ola bilər. Verilənlər bazasından gələn nəticələr adətən məhz belə görünür: sətirlərin siyahısı, hər sətir isə assosiativ massivdir. array_column bütün sətirlərdən bir sütunu götürür.

PHP
<?php

$students = [
    ["name" => "Aysel", "marks" => [5, 4, 5]],
    ["name" => "Murad", "marks" => [4, 4, 3]],
    ["name" => "Elvin", "marks" => [5, 5, 5]],
];

foreach ($students as $student) {
    $avg = array_sum($student["marks"]) / count($student["marks"]);
    echo $student["name"] . ": " . round($avg, 1) . "\n";
}

echo $students[1]["marks"][2], "\n";
echo implode(", ", array_column($students, "name")), "\n";
Gözlənilən nəticə
Aysel: 4.7
Murad: 3.7
Elvin: 5
3
Aysel, Murad, Elvin

Sıralama və faydalı funksiyalar

PHP
<?php

$prices = ["bread" => 0.8, "milk" => 1.9, "cheese" => 7.5, "tea" => 4.2];

echo count($prices), "\n";
echo array_sum($prices), "\n";
echo max($prices), "\n";
var_dump(in_array(1.9, $prices));
echo implode(", ", array_keys($prices)), "\n";

asort($prices);
echo implode(", ", array_keys($prices)), "\n";
arsort($prices);
echo array_key_first($prices), "\n";

$colors = explode(",", "red,green,blue");
sort($colors);
print_r($colors);
Gözlənilən nəticə
4
14.4
7.5
bool(true)
bread, milk, cheese, tea
bread, milk, tea, cheese
cheese
Array
(
    [0] => blue
    [1] => green
    [2] => red
)
FunksiyaNəyə görə sıralayırAçarlar
sort / rsortqiymət, artan / azalanyenidən nömrələnir
asort / arsortqiymət, artan / azalansaxlanılır
ksort / krsortaçar, artan / azalansaxlanılır
usortsənin müqayisə funksiyan (növbəti dərs)yenidən nömrələnir
Bütün sıralama funksiyaları massivi yerindəcə dəyişir və yeni massiv qaytarmır.

Parçalama və birləşdirmə

Massivin elementlərini bir sətirdə ayrı dəyişənlərə yazmaq olar: [$a, $b] = $pair; — buna parçalama (destructuring) deyilir. Assosiativ massivdə açarları göstərirsən. Yayma operatoru ... isə bir massivin elementlərini başqa massivin içinə «tökür».

PHP
<?php

[$first, $second] = ["gold", "silver"];
echo "$first, $second\n";

$a = 1;
$b = 2;
[$a, $b] = [$b, $a];
echo "a=$a b=$b\n";

["name" => $name, "city" => $city] = ["name" => "Nigar", "city" => "Shaki"];
echo "$name lives in $city\n";

$morning = ["tea", "bread"];
$evening = ["soup", "salad"];
$menu = [...$morning, ...$evening, "cake"];
echo implode(" + ", $menu), "\n";
Gözlənilən nəticə
gold, silver
a=2 b=1
Nigar lives in Shaki
tea + bread + soup + salad + cake
Köhnə üslub
$user = array('name' => 'Aysel', 'age' => 15);
list($x, $y) = $point;
$all = array_merge($boys, $girls);
Müasir PHP
$user = ['name' => 'Aysel', 'age' => 15];
[$x, $y] = $point;
$all = [...$boys, ...$girls];
array() və list() hələ də işləyir, amma yeni kodda qısa [] yazılışı standartdır.

Əsas fikirlər

  • İndeksli massivin elementləri 0-dan nömrələnir; $arr[] = $x sona element əlavə edir, count sayını verir.
  • Assosiativ massiv açar => qiymət cütlərini saxlayır; foreach ($arr as $key => $value) hər ikisini verir.
  • Çoxölçülü massivlər cədvəl kimidir; array_column bir sütunu çıxarır.
  • sort açarları silir, asort və ksort saxlayır; sıralama funksiyaları massivi yerindəcə dəyişir.
  • [$a, $b] = $arr massivi parçalayır, [...$a, ...$b] isə massivləri birləşdirir.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
$a = [10, 20, 30]; echo $a[1]; nə çap edir?