PHP

Massivlərlə işləyən funksiyalar

Biz artıq massivlərlə işləməyin əsaslarını öyrənmişik. Bu dərsdə massivlərlə işləyən funksiyaların işi ilə tanış olacağıq.

Dəyişən, yoxsa massiv?

is_array() funksiyası ilə dəyişənin qiymətinin massiv olub-olmadığını yoxlaya bilərik. Məsələn:

<?php

$numbers = [1, 3, 5, 7];
$name = 'Emil';

echo is_array($numbers) ? 'Massivdir' : 'Massiv deyil';
echo '<br>';
echo is_array($name) ? 'Massivdir' : 'Massiv deyil';

Nəticə:

Massivdir
Massiv deyil 

Massivdə indeksin mövcudluğunun yoxlanılması

Verilmiş massivdə indeksin mövcudluğunu yoxlamaq üçün foreach() konstruksiyası ilə massivin bütün elementlərinə müraciət edə bilərik. İlk ağla gələn budur. Lakin daha effektiv üsul mövcuddur. Bu məqsədlə PHP-yə öncədən quraşdırılmış array_key_exists() funksiyasından istifadə edə bilərik. Sözügedən funksiya birinci arqument kimi indeks, ikinci arqument kimi isə massiv qəbul edir. Əgər indeks massivdə mövcuddursa, true, əks halda false geri qayıdır. Məsələn:

<?php

$user = [
    'id' => 1,
    'name' => 'Emil',
    'email' => 'admin@codecourse.info',
    'gender' => 'M',
    'age' => 35
];

if (array_key_exists('email', $user)) {
    echo $user['email'];
} else {
    echo '$user massivində email indeksi yoxdur.';
}

Nəticə:

admin@codecourse.info

PHP-yə öncədən quraşdırılmış funksiyaların analoqunun yazılması yaxşı təcrübə sayılır. Ancaq yadda saxlayın ki, standart funksiyalar sürətli işləyir, çünki C proqramlaşdırma dilində yazılıb. Gəlin özümüz array_key_exists funksiyasının analoqunu yazaq:

<?php

function isKeyExistInArray(string|int $index, array $array): bool
{
    $result = false;

    foreach ($array as $key => $value) {
        if ($index === $key) {
            $result = true;
            break;
        }
    }
    return $result;
}

İndi isə özümüz yazdığımız funksiyanın işini yoxlayaq:

<?php

function isKeyExistInArray(string|int $index, array $array): bool
{
    $result = false;

    foreach ($array as $key => $value) {
        if ($index === $key) {
            $result = true;
            break;
        }
    }
    return $result;
}

$user = [
    'id' => 1,
    'name' => 'Emil',
    'email' => 'admin@codecourse.info',
    'gender' => 'M',
    'age' => 35
];

if (isKeyExistInArray('email', $user)) {
    echo $user['email'];
} else {
    echo '$user massivində email indeksi yoxdur.';
}

Nəticə:

admin@codecourse.info

Yuxarıdakı nümunədə ilk öncə isKeyExistInArray() funksiyası, sonra $user massivi gəlir. Artıq bildiyimiz kimi, if operatoru dairəvi mötərizə cütlüyü daxilində yazılmış şərti (ifadəni) yoxlayır və nəticəni məntiqi tipə çevirir. Nümunədə dairəvi mötərizə cütlüyü daxilində isKeyExistInArray() funksiyası çağrılır və ona 2 qiymət (email sətri (string tipi) və $user massivi) ötürülür. Funksiya 2 arqument ($index, $array) qəbul edir. Funksiyanın daxilində $result dəyişəninə false məntiqi tipi mənimsədirik. foreach dövr operatoru $array massivinin ($array massivi funksiyaya ötürülən massivdir, yəni indiki halda $user massivi) bütün elementlərinə növbə ilə müraciət edir və hər bir iterasiyada $key dəyişənin qiyməti ilə $index dəyişənin qiyməti (nümunədə 'email') müqayisə edilir. Uyğunluq tapıldıqda $result dəyişəninə true məntiqi tipi mənimsədirik və break operatoru ilə dövrün işini dayandırırıq ki, foreach dövr operatoru digər elementlərə müraciət etməsin. Bu, optimallaşdırmadır, bu halda skript daha sürətli işləyir. Uyğunluq tapılmadıqda funksiya $result dəyişəninin başlanğıc qiymətini, yəni false geri qaytarır. Bundan sonra, funksiyanın nəticəsi onun çağrıldığı yerə geri qayıdır. Əgər funksiyanın nəticəsi true, yəni doğrudursa, ekranda indeksi 'email' olan elementin qiyməti çap edilir. Əks halda, else konstruksiyası daxilində yazılmış kod ekranda çap edilir.

Massivdə elementin mövcudluğunun yoxlanılması

Massivdə elementin mövcudluğunu yoxlamaq üçün in_array() funksiyasından istifadə edə bilərik. Sözügedən funksiya birinci arqument kimi axtarılan element, ikinci arqument kimi isə massiv qəbul edir. Əgər axtarılan element massivdə mövcuddursa, true, əks halda false geri qayıdır. Məsələn:

<?php

$numbers = [5, 9, '15', 7, 9, -3];

if (in_array(15, $numbers)) {
    echo 'Massivdə 15 elementi var';
}

Nəticə:

Massivdə 15 elementi var

Əgər in_array() funksiyasında 3-cü parametr - true təyin edilibsə, elementin massivdə axtarılması zamanı identiklik (həm qiymət, həm də tip yoxlanılır) də nəzərə alınır. Məsələn:

<?php

$numbers = [5, 9, '15', 7, 9, -3];

if (in_array(15, $numbers, true)) {
    echo 'Massivdə 15 elementi var';
}

Yuxarıdakı koddan göründüyü kimi in_array() funksiyasında 3-cü parametr - true təyin edilib. Bildiyimiz kimi, '15' (string tipi) və 15 (int tipi) fərqlidir, ona görə axtarılan element massivdə yoxdur və brauzerdə heç nə görsənməyəcək.

array_search() funkiyası in_array() funkiyasına oxşardır, lakin o, true əvəzinə axtarılan elementin indeksini geri qaytarır. Məsələn:

<?php

$numbers = [5, 9, '15', 7, 9, -3];

$key = array_search('15', $numbers, true);
echo $key;

Nəticə:

2

Əgər array_search() funksiyasında 3-cü parametr - true təyin edilibsə, elementin massivdə axtarılması zamanı identiklik nəzərə alınır.

Massivdəki qiymətlərin dəyişənlərə köçürülməsi

Massivdəki qiymətlərin dəyişənlərə köçürülməsi üçün list() konstruksiyasından istifadə edirik. Məsələn:

<?php

$person = ['Emil', 35, 'admin@codecourse.info', 'Sumgait'];
list($name, $age, $email, $city) = $person;

echo $name . '<br>';
echo $age . '<br>';
echo $email . '<br>';
echo $city;

Nəticə:

Emil
35
admin@codecourse.info
Sumgait

Aşağıdakı kodda massivin yalnız 0-cı və 2-ci elementləri dəyişənlərə köçürülür. Bu məqsədlə list() konstruksiyasında massivdəki istifadə edilməyən elementlərin əvəzinə vergül işarəsi qoyulur:

<?php

$person = ['Emil', 35, 'admin@codecourse.info', 'Sumgait'];
list($name, , $email, ) = $person;

echo $name . '<br>';
echo $email . '<br>';

Nəticə:

Emil
admin@codecourse.info

list() konstruksiyası, həmçinin assosiativ massivlərlə işləyir. Məsələn:

<?php

$person = [
    'name' => 'Emil',
    'age' => 35,
    'email' => 'admin@codecourse.info',
    'city' => 'Sumgait'
];

list(
    'name' => $name,
    'age' => $age,
    'email' => $email,
    'city' => $city
    ) = $person;

echo $name . '<br>';
echo $age . '<br>';
echo $email . '<br>';
echo $city;

Nəticə:

Emil
35
admin@codecourse.info
Sumgait

Massivin bütün elementlərindən sətir formalaşdırılması

implode() funksiyası massivin bütün elementlərindən sətir formalaşdırır. Sözügedən funksiya birinci arqument kimi ayırıcı, ikinci arqument kimi massiv qəbul edir. Məsələn:

<?php

$person = ['Emil', 35, 'admin@codecourse.info'];
echo implode(',', $person);

Nəticə:

Emil, 35, admin@codecourse.info

Yuxarıdakı nümunədə implode() funkiyasında ayırıcı kimi vergül işarəsindən istifadə edilib. Ona görə formalaşdırılmış sətirdə massivin hər bir elementi arasında vergül işarəsi qoyulub.

Gəlin ayırıcı kimi "-" işarəsindən istifadə edək və nəticəyə baxaq:

<?php

$person = ['Emil', 35, 'admin@codecourse.info'];
echo implode('-', $person);

Nəticə:

Emil-35-admin@codecourse.info
0

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