- İndisli, ilişkisel ve çok boyutlu diziler oluşturmak ve elemanlarına erişmek
- Dizileri
foreachile dolaşmak vecount,implode,array_columngibi fonksiyonları kullanmak - Dizileri sıralamak, ayrıştırmak (destructuring) ve
...ile birleştirmek
Bir sınıfta 25 öğrenci var ve her birinin notlarını saklaman gerekiyor. 25 ayrı değişken mi oluşturacaksın? Elbette hayır. İşte burada dizi işe yarar: birçok değeri tek bir ad altında tutan bir yapı. PHP'de dizi hem liste hem de sözlük görevi görür; bu yüzden neredeyse her betikte karşına çıkar.
İndisli diziler
Bir dizi köşeli parantezlerle oluşturulur: ["Baku", "Ganja"]. Elemanlar 0'dan başlayan indislerle numaralandırılır. $cities[] = ... yazımı dizinin sonuna yeni bir eleman ekler, count eleman sayısını döndürür, print_r ise dizinin tüm içeriğini gösterir.
<?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";Baku
4
Shaki
Array
(
[0] => Baku
[1] => Ganja
[2] => Sumgait
[3] => Shaki
)
Baku, Ganja, Sumgait, Shakiimplode, dizinin elemanlarını verilen ayırıcıyla tek bir dizede birleştirir; explode ise tersini yapar: bir dizeyi ayırıcıya göre bölerek diziye çevirir. Var olmayan bir indise erişirsen PHP 8 Undefined array key uyarısı verir ve null döndürür.
İlişkisel diziler ve foreach
İlişkisel dizide numaralar yerine anlamlı anahtarlar kullanılır: "name" => "Leyla". Bu, tek bir şeyle ilgili bilgileri saklamak için kullanışlıdır. **foreach** döngüsü dizinin her elemanını dolaşır: foreach ($arr as $value) yalnızca değerleri, foreach ($arr as $key => $value) ise anahtarları da verir. Bir anahtarın var olup olmadığı isset ya da array_key_exists ile denetlenir.
<?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";
}Leyla is 14 years old bool(false) bool(true) name: Leyla age: 14 city: Baku grade: 8
Çok boyutlu diziler
Bir dizinin elemanı başka bir dizi de olabilir. Veritabanından gelen sonuçlar genellikle tam olarak böyle görünür: satırlardan oluşan bir liste, her satır da ilişkisel bir dizidir. array_column tüm satırlardan tek bir sütunu çeker.
<?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";Aysel: 4.7 Murad: 3.7 Elvin: 5 3 Aysel, Murad, Elvin
Sıralama ve kullanışlı fonksiyonlar
<?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);4
14.4
7.5
bool(true)
bread, milk, cheese, tea
bread, milk, tea, cheese
cheese
Array
(
[0] => blue
[1] => green
[2] => red
)| Fonksiyon | Neye göre sıralar | Anahtarlar |
|---|---|---|
sort / rsort | değer, artan / azalan | yeniden numaralanır |
asort / arsort | değer, artan / azalan | korunur |
ksort / krsort | anahtar, artan / azalan | korunur |
usort | kendi karşılaştırma fonksiyonun (sonraki ders) | yeniden numaralanır |
Ayrıştırma ve yayma
Bir dizinin elemanlarını tek satırda ayrı değişkenlere yazabilirsin: [$a, $b] = $pair; — buna ayrıştırma (destructuring) denir. İlişkisel dizide anahtarları belirtirsin. Yayma operatörü ... ise bir dizinin elemanlarını başka bir dizinin içine “döker”.
<?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";gold, silver a=2 b=1 Nigar lives in Shaki tea + bread + soup + salad + cake
$user = array('name' => 'Aysel', 'age' => 15);
list($x, $y) = $point;
$all = array_merge($boys, $girls);$user = ['name' => 'Aysel', 'age' => 15];
[$x, $y] = $point;
$all = [...$boys, ...$girls];array() ve list() hâlâ çalışır, ancak yeni kodda kısa [] yazımı standarttır.Önemli noktalar
- İndisli dizinin elemanları 0'dan numaralanır;
$arr[] = $xsona eleman ekler,countboyutu verir. - İlişkisel dizi
anahtar => değerçiftlerini saklar;foreach ($arr as $key => $value)ikisini de verir. - Çok boyutlu diziler tablo gibidir;
array_columntek bir sütunu çıkarır. sortanahtarları siler,asortveksortkorur; sıralama fonksiyonları diziyi yerinde değiştirir.[$a, $b] = $arrbir diziyi ayrıştırır,[...$a, ...$b]ise dizileri birleştirir.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
$a = [10, 20, 30]; echo $a[1]; ne yazdırır?