PHP

Massivlər

php-beginner qovluğunda arrays.php faylı yaradırıq. Bu dərsdəki bütün nümunələri həmin fayla əlavə edib yoxlaya bilərsiniz.

Adi dəyişənlərdən fərqli olaraq massivlər çoxlu elementlərin saxlanılması üçün nəzərdə tutulmuş xüsusi dəyişənlərdir.

massiv

Massivin yaradılması

Boş massivin yaradılması sintaksisi aşağıdakı kimidir:

$programmingLanguages = [];

Massivin elementləri kvadrat mötərizələrin içərisində yazılır:

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];

echo əmrinin köməyilə massivin tərkibini ekranda göstərmək istədikdə:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
echo $programmingLanguages;

Nəticə:

echo əmri massivin tərkibini göstərmir

Göründüyü kimi echo əmri $programmingLanguages massivinin tərkibini ekranda göstərmir. Warning tipli xəbərdarlıq göstərilir və massiv 'Array' sətrinə çevrilir. Həmçinin print əmri massivin tərkibini ekranda göstərmir.

Massivin tərkibini ekranda göstərmək üçün var_dump() funksiyasından istifadə edə bilərik:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
var_dump($programmingLanguages);

Nəticə:

massivin tərkibi ekranda göstərilir

Həmçinin print_r() funksiyasının köməyilə massivin tərkibinə baxa bilərik.

$programmingLanguages massivinin bütün elementləri sətir (string) tipinə aiddir. Ancaq unutmayın ki, massivə istənilən tip elementlər əlavə etmək mümkündür:

<?php

$myArray = [1, 0.5, 'Emil', null];
var_dump($array);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:6:
array (size=4)
  0 => int 1
  1 => float 0.5
  2 => string 'Emil' (length=4)
  3 => null

İndi massivin elementləri müxtəlif tiplərə aiddirlər: int, float, stringnull.

Massivin elementinə müraciət

Massivin elementinə müraciət etmək üçün echo array[key] sintaksisindən istifadə edilir. Massivin elementinin qiymətini ekranda göstərmək üçün əvvəlcə massivin adını, sonra kvadrat mötərizənin içərisində onun indeksini yazmaq lazımdır:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
echo $programmingLanguages[0];

Nəticə:

HTML

Massivdə sıralama başlanğıc ayar olaraq 0-dan başlanır, yəni massivin 1-ci elementi 0-cı indeksdə yerləşir.

İndi massivdə indeksi 2 olan elementin qiymətini ekranda göstərək:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
echo $programmingLanguages[2];

Nəticə:

PHP

Massivdə mövcud olmayan indeksə müraciət - bu, təyin edilməmiş dəyişənə müraciət kimi qəbul edir, E_NOTICE səviyyəli səhv qeydə alınır və nəticə null-a bərabər olur:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
echo $programmingLanguages[5];

Nəticə:

Warning: Undefined array key 5 in D:\OpenServer\domains\php-beginner\arrays.php on line 6

$programmingLanguages massivində indeksi 5 olan element yoxdur.

Massivdə yeni elementin yaradılması

$programmingLanguages massivinə yeni element əlavə edək. Həmin elementin indeksi massivdə ən böyük indeksin üzərinə 1 əlavə etməklə (ən böyük indeks + 1) hesablanır:

$programmingLanguages[] = 'Java';

İndi var_dump() funksiyasının köməyilə $programmingLanguages massivinin tərkibini ekranda göstərək:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript'];
$programmingLanguages[] = 'Java';

var_dump($programmingLanguages);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:8:
array (size=5)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  3 => string 'JavaScript' (length=10)
  4 => string 'Java' (length=4)

$programmingLanguages massivində indeksi 4 olan yeni element - 'Java' yaradıldı. Ən böyük indeksin (3) üzərinə 1 əlavə edildi.

İndeksi özümüz təyin edirik

Hazırda $programmingLanguages massivində 5 element var və onların indeksi avtomatik təyin edilib. Buna görə massivin 1-ci elementi 0-cı indeksdə, 2-ci elementi 1-ci indeksdə yerləşir və bu ardıcıllıqla davam edir:

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java'];

Lakin massiv yaradarkən, yaxud massivə yeni element əlavə edərkən onun indeksini özümüz təyin edə bilərik. İndi $programmingLanguages massivinə indeksi 9 olan 'Go' elementi əlavə edək:

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java', 9 => 'Go'];

Həmçinin aşağıdakı yazılış sintaksisindən istifadə edə bilərik:

$programmingLanguages[9] = 'Go';

Sizə hansı variant daha rahat gəlirsə, onu istifadə edin.

var_dump() funksiyasının köməyilə $programmingLanguages massivinin tərkibinə baxaq:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java', 9 => 'Go'];
var_dump($programmingLanguages);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:6:
array (size=6)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  3 => string 'JavaScript' (length=10)
  4 => string 'Java' (length=4)
  9 => string 'Go' (length=2)

Göründüyü kimi massivə indeksi 9 olan 'Go' elementi əlavə edildi.

Əgər indi $programmingLanguages massivinə element əlavə etsək, onun indeksi massivdəki ən böyük ədədi indeksdən 1 vahid çox olacaq:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java', 9 => 'Go'];
$programmingLanguages[] = 'Haskell';

var_dump($programmingLanguages);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:7:
array (size=7)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  3 => string 'JavaScript' (length=10)
  4 => string 'Java' (length=4)
  9 => string 'Go' (length=2)
  10 => string 'Haskell' (length=7)

Yeni elementin indeksi massivdə artıq mövcuddursa, onda yeni elementin qiyməti əvvəlki elementin yerinə yazılır:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java', 9 => 'Go', 10 => 'Haskell'];
var_dump($programmingLanguages);

$programmingLanguages[10] = 'Rust';
var_dump($programmingLanguages);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:6:
array (size=7)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  3 => string 'JavaScript' (length=10)
  4 => string 'Java' (length=4)
  9 => string 'Go' (length=2)
  10 => string 'Haskell' (length=7)

D:\OpenServer\domains\php-beginner\arrays.php:9:
array (size=7)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  3 => string 'JavaScript' (length=10)
  4 => string 'Java' (length=4)
  9 => string 'Go' (length=2)
  10 => string 'Rust' (length=4)

Massivin elementini silirik

Massivdə elementi silmək üçün unset() konstruksiyasından istifadə edilir. $programmingLanguages massivindən indeksi 3 olan elementi silirik:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'JavaScript', 'Java', 9 => 'Go', 10 => 'Rust'];
unset($programmingLanguages[3]);

var_dump($programmingLanguages);

Nəticə:

D:\OpenServer\domains\php-beginner\arrays.php:8:
array (size=6)
  0 => string 'HTML' (length=4)
  1 => string 'CSS' (length=3)
  2 => string 'PHP' (length=3)
  4 => string 'Java' (length=4)
  9 => string 'Go' (length=2)
  10 => string 'Rust' (length=4)

Massivdə elementlərin sayı

count() funksiyasının köməyilə massivdəki elementlərin sayını tapa bilərik:

<?php

error_reporting(-1);

$programmingLanguages = ['HTML', 'CSS', 'PHP', 'Java', 9 => 'Go', 10 => 'Rust'];
$count = count($programmingLanguages);
echo sprintf('Massivdə %d element var', $count);

Nəticə:

Massivdə 6 element var

Assosiativ massivlər

Massivin indeksi sətir tipi olduqda o, assosiativ massiv adlanır.

Məsələn, saytda qeydiyyatdan keçən istifadəçilərin məlumatları verilənlər bazasında saxlanılır. Proqramçı istifadəçi profili yaratmaq üçün həmin məlumatları verilənlər bazasından assosiativ massiv kimi əldə edir, onlar üzərində müvafiq əməliyyatlar aparır. Əlbəttə istifadəçilərin məlumatlarını verilənlər bazasından indeksli massiv kimi əldə etmək mümkündür, lakin bu halda $user massivindəki 2-ci indeksin name sütununu, 3-cü indeksin email sütununu, 4-cü indeksin gender sütununu ifadə etməsini yaddaşda saxlamaq lazımdır. Bu isə çətindir, həm də müəyyən vaxtdan sonra layihə ilə digər proqramçı məşğul ola bilər. Əlbəttə ki o, belə olan halda əvvəlki proqramçı haqda yaxşı düşünməyəcək. Bundan başqa, gələcəkdə verilənlər bazasında istifadəçilər üçün yeni sütunlar əlavə edilə bilər. Bu halda koddakı indeksləri dəyişdirmək lazımdır. Bu baxımından assosiativ massivlər rahatdır.

$user indeksli massivi yaradırıq:

<?php

$user = ['Emil', 'admin@vebkurs.info', 'M', 'Sumgait', '2021-12-28'];

İstifadəçinin adını ekranda göstərmək üçün massivin 1-ci elementinə (0-cı indeksə) müraciət edirik:

<?php

error_reporting(-1);

$user = ['Emil', 'admin@vebkurs.info', 'M', 'Sumgait', '2021-12-28'];
echo $user[0];

Nəticə:

Emil

İstifadəçinin yaşadığı şəhərin adını ekranda göstərmək üçün massivin 4-cü elementinə (3-cü indeksə) müraciət edirik:

<?php

error_reporting(-1);

$user = ['Emil', 'admin@codecourse.info', 'M', 'Sumgait', '2021-12-28'];
echo $user[3];

Nəticə:

Sumgait

İndi isə $user assosiativ massivini yaradaq:

<?php

$user = [
    'name' => 'Emil',
    'email' => 'admin@vebkurs.info',
    'gender' => 'M',
    'city' => 'Sumgait',
    'created_at' => '2021-12-28'
];

İstifadəçinin e-poçtunu ekranda göstərmək üçün email indeksinə müraciət edirik:

<?php

$user = [
    'name' => 'Emil',
    'email' => 'admin@vebkurs.info',
    'gender' => 'M',
    'city' => 'Sumgait',
    'created_at' => '2021-12-28'
];

echo $user['email'];

Nəticə:

admin@vebkurs.info

Göründüyü kimi assosiativ massivlə işləmək rahatdır.

.php genişlənməsi olan faylda həm PHP kod, həm də HTML teqlərdən istifadə edə bilərik. Artıq bilirik ki, PHP interpretatoru <?php ... ?> teqləri içərisində yazılmış əmrləri icra edir. user.php faylına aşağıdakı koda əlavə edirik:

<?php

error_reporting(-1);

$user = [
    'name' => 'Emil',
    'email' => 'admin@vebkurs.info',
    'gender' => 'M',
    'city' => 'Sumgait',
    'created_at' => '2021-12-28'
];
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?= $user['name'] ?></title>
</head>

<body>
<h1><?= $user['name']; ?></h1>
<p>İstifadəçinin məlumatları</p>

<ul>
    <li><strong>E-poçt:</strong> <?= $user['email']; ?></li>
    <li><strong>Cins:</strong> <?= $user['gender']; ?></li>
    <li><strong>Şəhər:</strong> <?= $user['city']; ?></li>
    <li><strong>Yaradılma tarixi:</strong> <?= $user['created_at']; ?></li>
</ul>
</body>
</html>

Nəticə:

user.php faylı

Yuxarıda yazıldığı kimi PHP interpretatoru <?php ... ?> teqləri içərisində yazılmış əmrləri PHP kodu kimi icra edir.

Skriptdə istifadə edilən <?= echo-teqi <?php echo teqinin qısa yazılışıdır.

foreach

Massivdə, məsələn, 10 min element ola bilər və bu elementlər üzərində müəyyən əməliyyatlar aparmaq lazım gələ bilər. Bu işi asanlaşdırmaq üçün massiv və obyektlər üçün nəzərdə tutulmuş foreach dövr operatoru massivin bütün elementlərinə növbə ilə müraciət edə və onlar üzərində müxtəlif əməliyyatlar apara bilər. Yazılış sintaksisi aşağıdakı kimidir:

foreach ($array as $key => $value) {
    ...
}

$array - bu, massivdir, $key$value isə massivin cari iterasiyadakı indeks və qiymətidir. Fiqurlu mötərizə daxilində olan kod massivin hər bir elementi üçün tətbiq edilir. Bu deyilənləri daha yaxşı başa düşmək üçün gəlin aşağıdakı nümunəyə baxaq:

<?php

$user = [
    'name' => 'Emil',
    'email' => 'admin@codecourse.info',
    'gender' => 'M',
    'city' => 'Tallin',
    'created_at' => '2021-12-28'
];

foreach ($user as $key => $value) {
    echo $key . ': ' . $value;
    echo '<br>';
}

Nəticə:

name: Emil
email: admin@codecourse.info
gender: M
city: Tallin
created_at: 2021-12-28

Yuxarıdakı nümundən göründüyü kimi foreach dövr operatoru $user massivinin bütün elementlərinə növbə ilə müraciət edir. Birinci iterasiyada $key$value dəyişənlərinin qiymətləri name Emil, ikincidə email admin@codecourse.info və bu ardıcıllıqla davam edir. $key$value dəyişənləri başqa cür də adlandırıla bilər. 5 iterasiya (massivin elementlərinin sayı qədər) icra olunur.

Massivin indeksi lazım deyilsə, onda foreach dövr operatorunun yazılış sintaksisi aşağıdakı kimi olacaq:

<?php

foreach ($array as $value) {
    ...
}

Məsələn:

<?php

$users = ['Emil', 'Zaur', 'Elməddin', 'Sabit', 'Rasim'];

foreach ($users as $user) {
    echo $user;
    echo '<br>';
}

Nəticə:

Emil
Zaur
Elməddin
Sabit
Rasim

Gəlin başqa bir nümunəyə baxaq. $numbers massivi 7 elementdən ibarətdir və bütün elementlər ədəddir:

<?php

$numbers = [5, 9, -5, 8, 15, 23, -13];

Gəlin ədədi ortanı tapaq. Ədədi orta - bir neçə ədədin cəminin onların sayına bölunməsindən alınan ədədə deyilir. Çalışmanın həlli aşağıdakı kimi olacaq:

<?php

$numbers = [5, 9, -5, 8, 15, 23, -13];
$sumOfNumbers = 0;

foreach ($numbers as $number) {
    $sumOfNumbers += $number;
}

$countOfNumbers = count($numbers);
$averageNumber = $sumOfNumbers / $countOfNumbers;
echo $averageNumber;

Nəticə:

6

Yuxarıdakı skriptin izahı:

  1. Əvvəlcə $sumOfNumbers dəyişəninə 0 mənimsədirik
  2. Sonra hər iterasiyada $sumOfNumbers dəyişəninin üstünə massivdə olan elementləri əlavə edirik
  3. Dövr bitdikdə $sumOfNumbers dəyişəninin qiyməti 42 olur
  4. count() funksiyası ilə massivdə olan elementlərin sayını tapırıq
  5. Ədədi ortanı tapmaq üçün sumOfNumbers dəyişəninin qiymətini massivdə olan elementlərin sayına bölürük, yəni 42 / 7 = 6
  6. Nəticəni ekrana çıxarırıq
0

Şərh yazmaq üçün hesabınıza daxil olun.