Kategoriler
PHP

PHP’de Dizi (Array) Fonksiyon ve Metotları

PHP programlama dili diziler üzerinde çeşitli işlemler yapmamızı sağlayan bazı hazır fonksiyon ve metotlara sahiptir. Bu fonksiyon ile diziler üzerinde işlemleri hızlı ve zahmetsiz bir şekilde gerçekleştirebilirsiniz.

Daha fazla uzatmadan PHP’de diziler üzerinde işlemler yapmamıza imkan tanıyan fonksiyonları ve kullanım şekillerine yakından bakalım.


count() ve sizeof()

PHP’de count() fonksiyonu bir dizideki eleman sayısını veya bir nesnedeki şeylerin sayısını döndürür.

$dizi = [1,2,3,4,5,6,7,8,9];
echo count($dizi); #Output: 9
echo sizeof($dizi); #Output: 9

sizeof() fonksiyonu ise count() fonksiyonunun bir takma adıdır. Yani sizeof() fonksiyonu kullanıldığında PHP arka tarafta count() fonksiyonunu çalıştırmaktadır.


Dizilerde Eleman Ekleme/Silme

array_unshift() ve array_push()

array_unshift() bir dizinin başlangıcına bir veya daha fazla eleman ekler.

$meyve = array("elma", "armut");
array_unshift($meyve, "muz", "karpuz");
print_r($meyve);

Yukarıdaki kodun çıktısı şöyledir;

Array
(
    [0] => muz
    [1] => karpuz
    [2] => elma
    [3] => armut
)

array_push() bir dizinin sonuna bir veya daha fazla eleman eklemekte kullanılır.

$meyve = array("elma", "armut");
array_push($meyve, "portakal", "kayısı");
print_r($meyve);

Yukarıdaki kodun çıktısı şöyledir;

Array
(
    [0] => elma
    [1] => armut
    [2] => portakal
    [3] => kayısı
)

array_shift()

Bir dizinin başlangıcından bir elemanı diziden çıkarır.

$deste = ["as", "papaz", "kız", "vale"];
array_shift($deste);
print_r($deste);

Yukarıdaki kodun çıktısı aşağıdaki gibidir;

Array
(
    [0] => papaz
    [1] => kız
    [2] => vale
)

array_pop()

Dizinin sonundaki elemanı diziden çıkarır/siler.

$deste = ["as", "papaz", "kız", "vale"];
array_pop($deste);
print_r($deste);

Yukarıdaki kodun çıktısı şu şekildedir;

Array
(
    [0] => as
    [1] => papaz
    [2] => kız
)

Dizi’de Gösterici (İşaretçi)

key()

Her dizinin, ilk elemanı konumlayan bir göstericisi vardır. key() fonksiyonu bir diziden gösterici konumundaki anahtarı döndürür.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
$anahtar = key($meyve);
echo $anahtar; #Output: meyve1

Gösterici başlangıçta ilk elemanda olduğu için ilk elemanın anahtar değerini döndürecektir.


current() ve pos()

current() fonksiyonu bir diziden gösterici konumundaki elemanı döndürür. Göstericinin yerini değiştirmez.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
$gosterici_elemani = current($meyve);
echo $gosterici_elemani; #Output: elma

Gösterici başlangıçta ilk elemanda olduğu için ilk elemanın değerini gösterecektir.

pos() fonksiyonu current() fonksiyonunun takma adıdır ve pos() fonksiyonu çalıştırıldığında PHP arka tarafta current() fonksiyonunu çalıştırır.


end()

Bir dizinin dahili göstericisini sonuncu elemana konumlandırır ve bu elemanın değerini döndürür.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
echo end($meyve); #Output: vişne

next()

Dizinin dahili göstericisini bir ilerleterek sonraki elemana getirir.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
next($meyve); //Göstericiyi 1 ilerlet.
echo current($meyve); #Output: armut

prev()

Dizinin dahili göstericisini bir önceki elemana getirir.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
end($meyve); //Göstericiyi son elemana taşı
prev($meyve); //Göstericiyi bir önceki elemana taşı
echo current($meyve); #Output: kiraz

reset()

Bir dizinin dahili göstericisini ilk elemana konumlandırır ve ilk dizi elemanının değerini döndürür. end() işlevinin tam zıddıdır.

$meyve = [
    "meyve1" => "elma",
    "meyve2" => "armut",
    "meyve3" => "kiraz",
    "meyve4" => "vişne"
];
end($meyve);
echo prev($meyve); #Output: kiraz
echo reset($meyve); #Output: elma

Dizilerde Dönüşüm

explode()

Bir dize (string) değeri belirtilen ayraçlardan bölerek bir dizi haline getirir.

$str = "Muhammet,Yeliz,Şafak,Merve,Yusuf,Selin";
$dizi = explode(",", $str);
print_r($dizi);

Yukarıdaki kodun çıktısı şöyledir;

Array
(
    [0] => Muhammet
    [1] => Yeliz
    [2] => Şafak
    [3] => Merve
    [4] => Yusuf
    [5] => Selin
)

implode()

Bir diziyi belirtilen birleştirici ile birleştirerek bir dize (string) haline getirir.

$dizi = ["Muhammet", "Yeliz", "Ahmet", "Mustafa", "Fatih"];
$str = implode(",", $dizi);
echo $str;

Yukarıdaki kodun çıktısı şöyledir;

Muhammet,Yeliz,Ahmet,Mustafa,Fatih

list()

Bir dizinin elemanlarını sırasıyla bir değişken olarak atar.

$dizi = ["kahve", "uyku", "kafein"];
list($icecek, $neyi, $guc) = $dizi;
echo "{$icecek} {$neyi} kaçırır, çünkü içinde {$güç} vardır.";

Yukarıdaki kodun çıktısı şöyledir;

kahve uyku kaçırır, çünkü içinde kafein vardır.

Dizilerde Birleştirme

array_merge()

Belirtilen dizilerin elemanlarını art arda ekleyerek yeni bir dizi oluşturur ve bu diziyi döndürür.

  • Eğer dizilerde aynı anahtara sahip elemanlar varsa sonraki dizinin elemanı öncekinin yerine konur.
  • Eğer diziler sayısal anahtarlar içeriyorsa sonraki değer öncekinin üzerine yazılmaz, sona eklenir.
  • Eğer diziler sayısal INDEX’li ise sonuç dizisindeki INDEXler sıfırdan başlayarak yeniden oluşturulur.
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);

Yukarıdaki kodun çıktısı şöyledir;

Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
)

array_merge_recursive()

Bir veya daha fazla sayıda diziyi art arda ekleyerek yeni bir dizi olurur ve bu diziyi döndürür.

  • Eğer dizilerde aynı anahtara sahip elemanlar varsa sonraki dizilerin eleman değerleri ilk elemana bir alt dizi değeri olarak art arda eklenir.
  • Eğer değerlerden biri zaten bir dizi ise işlev bu diziyi diğer dizideki ilgili girdiyle karşılaştırır.
  • Eğer diziler sayısal anahtarlar içeriyorsa sonraki değer daima sona eklenir.
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);

Yukarıdaki kodun çıktısı şöyledir;

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )
            [0] => blue
        )
    [0] => 5
    [1] => 10
)

array_combine()

Anahtarlar için farklı, değerler için ise başka bir dizi kullanılarak; ilişkisel başka bir dizi oluşturulur.

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);

Yukarıdaki kodun çıktısı;

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)

Dizi’de Kırpma

array_slice()

Bir dizinin belli bir bölümünü döndürür. İlk ikisi zorunlu 4 parametre alır.

  1. İlk parametre bir dizi (array) türünde belli bir bölümünün alınacağı dizi verilir.
  2. Tamsayı türünde (int) dizinin hangi sıradan başlayarak kırpılacağını belirtir. Değer pozitifse baştan, negatifse sondan başlanır.
  3. Tamsayı türünde (int) kaç eleman alınarak kırpılma işlemi yapılacağı belirtilir. Sayı belirtilmezse varsayılan değeri null türündedir ve dizi sonuna kadar işlem yapılır. Sayı negatifse dizinin sonundan başlayarak kırpılma yapılır.
  4. Mantıksal (bool) türünde eski dizinin INDEX değerlerini koruyup korumayacağını belirtir. true ise korunur, false ise korunmaz. Varsayılan olarak false‘dür.
$dizi = ["Muhammet", "Yeliz", "Ahmet", "Mustafa", "Fatih"];
$yeni = array_slice($dizi, 1, 3, false);
print_r($yeni);

Yukarıdaki kodu çıktısı aşağıdaki gibidir;

Array
(
    [1] => Yeliz
    [2] => Ahmet
    [3] => Mustafa
)

array_splice()

Bir dizinin belli bir bölümünü silip yerine başka şeyler koyar.

$dizi = ["Muhammet", "Yeliz", "Ahmet", "Mustafa", "Fatih"];
$yeni = ["Süleyman", "Hakan"];
array_splice($dizi, 2, null, $yeni);
print_r($dizi);

Yukarıdaki kodun çıktısı aşağıdaki gibidir;

Array
(
    [0] => Muhammet
    [1] => Yeliz
    [2] => Süleyman
    [3] => Hakan
    [4] => Ahmet
    [5] => Mustafa
    [6] => Fatih
)

array_chunk()

Bir diziyi belli uzunlukta bölümlere ayırır.

$dizi = ["Muhammet", "Yeliz", "Ahmet", "Mustafa", "Fatih", "Süleyman"];
$yeni = array_chunk($dizi, 2);
print_r($yeni);

Yukarıdaki kodun çıktısı şu şekildedir;

Array
(
    [0] => Array
        (
            [0] => Muhammet
            [1] => Yeliz
        )
    [1] => Array
        (
            [0] => Ahmet
            [1] => Mustafa
        )
    [2] => Array
        (
            [0] => Fatih
            [1] => Süleyman
        )
)

array_column()

PHP’de dizileri kullanarak tablo yapısında bir veri inşa edilebilir. Bu tip dizilerde array_column() fonksiyonu belli bir sütun (anahtar) değerine ait verilerin değerlerini bir dizi halinde döndürür.

$user = [
    [
        "id" => 2135,
        "ad" => "John",
        "soyad" => "Doe",
    ],
    [
        "id" => 3245,
        "ad" => "Sally",
        "soyad" => "Smith",
    ],
    [
        "id" => 5342,
        "ad" => "Jane",
        "soyad" => "Jones",
    ],
    [
        "id" => 5623,
        "ad" => "Peter",
        "soyad" => "Doe",
    ]
];

$adlar = array_column($user, "ad");
print_r($adlar);

Yukarıdaki kodun çıktısı;

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

Dizilerde Kesişim

array_intersect()

Dizilerin kesişimini hesaplar ve anahtarlarını koruyarak bir dizi içinde döndürür.

$dizi1 = ["a" => "green", "red", "blue"];
$dizi2 = ["b" => "green", "yellow", "red"];
$result = array_intersect($dizi1, $dizi2);

Yukarıdaki örneğin çıktısı;

Array
(
    [a] => green
    [0] => red
)

array_intersect_key()

Karşılaştırma işlemi için anahtarları kullanarak dizilerini kesişimini hesaplar ve ilişkisel bir dizi döndürür.

$dizi1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$dizi2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

print_r(array_intersect_key($array1, $array2));

Yukarıdaki örneğin çıktısı;

Array
(
    [blue] => 1
    [green] => 3
)

array_intersect_assoc()

Dizilerin kesişimlerini hesaplarken ek olarak INDEX’leri de karşılaştırılır ve bir dizi olarak döndürür. array_intersect() fonksiyonunun aksine karşılaştırmada anahtarlar kullanılır.

$dizi1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$dizi2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result = array_intersect_assoc($dizi1, $dizi2);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [a] => green
)

Dizilerde Farklılık

array_diff()

Bir dizi ile bir veya daha fazla diziyi karşılaştırır ve diğer dizilerde bulunmayan değerleri dizi içinde döndürür. Dizi içindeki anahtarlar korunur.

$dizi1 = array("a" => "green", "red", "blue", "red");
$dizi2 = array("b" => "green", "yellow", "red");
$result = array_diff($dizi1, $dizi2);

print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [1] => blue
)

array_diff_key()

Bir dizi ile bir veya daha fazla dizinin indislerini karşılaştırır ve farkı dizi olarak döndürür.

$dizi1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$dizi2 = array('green' => 5, 'yellow' => 7, 'cyan' => 8);
$result = array_diff_key($dizi1, $dizi2);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [blue] => 1
    [red] => 2
    [purple] => 4
)

array_diff_assoc()

Bir diziyi bir veya daha fazla dizi ile karşılaştırır ve farkı bir dizi olarak döndürür. Karşılaştırma işleminde anahtarları dikkate alır.

$dizi1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$dizi2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($dizi1, $dizi2);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

Dizilerde Güncelleme

array_replace()

Bir dizinin değerlerini bir veya birden fazla dizinin değerleri ile günceller. Bu güncelleme işlemi anahtar ve indis bilgilerine göre gerçekleştirilir. İlk dizide olmayan elemanlar ilk dizide oluşturulur ve bir dizi olarak geri döner.

$esas = array("portakal", "muz", "elma", "armut");
$ikame = array(0 => "karpuz", 4 => "kavun");
$ikame2 = array(0 => "kiraz");

$sepet = array_replace($esas, $ikame, $ikame2);
print_r($sepet);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => kiraz
    [1] => muz
    [2] => elma
    [3] => armut
    [4] => kavun
)

array_replace_recursive()

İlk dizinin elemanlarını aktarılan diğer dizilerde ardışık olarak günceller.

İlk dizideki bir anahtar ikinci dizide mevcutsa ilk dizideki değer ikinciden güncellenir. İkinci dizide olup ilk dizide olmayan anahtarlar ilk dizide oluşturulur. Sadece ilk dizide bulunan anahtarların değerlerine dokunulmaz. Birden fazla güncelleyici dizi belirtilmişse diziler sırayla işlenir; yani daima sonraki dizideki değerler daima üste yazar.

Bu fonksiyon ardışık işlem yapar: alt dizilerdeki değerleri de aynı şekilde günceller.

İlk dizideki değer sayıl bir değerse, ikinci dizideki sayıl veya dizi değerle güncelenir. İlk ve ikinci dizideki değerlerin ikisi de dizi ise güncelleme işlemi bu alt dizilere ardışık olarak uygulanır.

$esas = [
    "kislik" => ["portakal"],
    "yazlik" => ["karpuz", "kavun"],
];
$ikame = [
    "kislik" => ["mandalina"],
    "yazlik" => ["üzüm"],
];

$sepet = array_replace_recursive($esas, $ikame);
print_r($sepet);

Yukarıdaki örneğin çıktısı;

Array
(
    [kislik] => Array
    (
            [0] => mandalina
    )
    [yazlik] => Array
    (
            [0] => üzüm
            [1] => kavun
    )
)

Diziyi Filtreleme

array_filter()

Bir dizinin elemanlarını bir geri çağırım (callable) fonksiyonu ile süzgeçten geçirir ve bir dizi döndürür.

Fonksiyon true döndürürse eleman yeni diziye eklenir, yoksa eklenmez. Dizideki anahtar bilgisi korunur. Dizide boşluklar olabilir, bu boşluklardan kurtulmak için array_values() fonksiyonu kullanılabilir.

function cift_sayi($var)
{
    return !($var & 1);
}

$dizi = ["a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5];

$result = array_filter($dizi, "cift_sayi");
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [b] => 2
    [d] => 4
)

Bu fonksiyon varsayılan olarak dizi elemanlarının değerini geri çağırım fonksiyonuna gönderecektir. Sadece anahtar bilgisini ya da hem anahtar hem de değer bilgisinin geri çağırım fonksiyona gönderilmesini isteyebilirsiniz. Bu durumda üçüncü parametre olarak kullanılacak kipi bildirmelisiniz.

ARRAY_FILTER_USE_KEY – Sadece anahtar aktarılır.
ARRAY_FILTER_USE_BOTH – Hem değer hem anahtar bilgisi aktarılır.

Bir de kip parametresini de bildiren bir örnek vereyim. Bu örnekte hem anahtar hem de değer bilgisinin bir dize olmasını istiyorum öyleyse;

function dize_mi($var1, $var2)
{
    return (is_string($var1) && is_string($var2)) ? true : false;
}

$dizi = ["a" => "Ahmet", "b" => "Burcu", 4 => "Selim", "c" => 25];

$result = array_filter($dizi, "dize_mi", ARRAY_FILTER_USE_BOTH);
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [a] => Ahmet
    [b] => Burcu
)

Dizi Oluşturucular

range()

Belirtilen bir aralıktaki elemanlar ile bir dizi oluşturur ve döndürür.

$result = range(1, 5);
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

Pozitif bir tam sayı olarak üçüncü bir parametre verilerek adım oluşturulabilir. Örneğin;

$result = range(0, 50, 7);
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [0] => 0
    [1] => 7
    [2] => 14
    [3] => 21
    [4] => 28
    [5] => 35
    [6] => 42
    [7] => 49
)

array_fill()

Bir diziyi belirtilen anahtardan başlayarak belirtilen miktarda belirtilen değeri eleman olarak ekler ve dizi olarak döndürür.

$dizi = array_fill(4, 3, "muz");
print_r($dizi);

Yukarıdaki kodun çıktısı;

Array
(
    [4] => muz
    [5] => muz
    [6] => muz
)

array_fill_keys()

Anahtar bilgilerini bir dizi olarak alır ve değer bilgisi olarak verilen değeri ekler ve bir dizi olarak döner.

$anahtar = ["foo", 6, 8, "bar"];
$dizi = array_fill_keys($anahtar, "limon");
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [foo] => limon
    [6] => limon
    [8] => limon
    [bar] => limon
)

array_pad()

Belirtilen dizinin boyutunu belirtilen boyuta çıkarırken, belirtilen değerleri yerleştirir. Dizi belirtilen boyuttan zaten büyükse bir işlem yapılmaz.

$dizi = [5, 10, 7];

$result = array_pad($dizi, 6, 1);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => 5
    [1] => 10
    [2] => 7
    [3] => 1
    [4] => 1
    [5] => 1
)

compact()

Değişkenler ve değerleri kullanılarak bir dizi oluşturur ve döndürür. Değişken isimleri bir dize ya da dizi olarak verilebilir.

$sehir = "İstanbul";
$ilce = "Bakırköy";
$olay = "Uyarı";
$konu = "Salgın";

$val_name = ["sehir", "ilce"];

$dizi = compact("olay", $val_name, "konu");
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [olay] => Uyarı
    [sehir] => İstanbul
    [ilce] => Bakırköy
    [konu] => Salgın
)

Dizi’de Arama

array_keys()

Bir dizideki tüm anahtar bilgisini dizi olarak döndürür.

$dizi = [0 => 100, "color" => "blue"];

$result = array_keys($dizi);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => 0
    [1] => color
)

Bu fonksiyon genellikle bir dizi içerisinde arama yapmak için kullanılır.

$dizi = ["blue", "red", "green", "blue", "blue"];

$result = array_keys($dizi, "blue");
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)

array_values()

Bir dizinin tüm değerlerini sayısal olarak indisleyerek döndürür.

$dizi = ["beden" => "L", "renk" => "kırmızı"];

$result = array_values($dizi);
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [0] => L
    [1] => kırmızı
)

array_search()

Bir dizide belirtilen değeri arar ve bulursa ilgili ilk anahtarı döndürür ve aramayı sonlandırır. Aradığınız değer birden fazla varsa ve hepsinin anahtar bilgisini istiyorsanız array_keys() fonksiyonunu kullanabilirsiniz.
Aranan veri bir dize ise büyük-küçük harf duyarlıdır.
Bu fonksiyonun döndüreceği değer false ya da false olarak değerlendirelecek farklı bir değer olabileceğinden dolayı === operatörü ile sınanmalıdır.

$dizi = [0 => "mavi", 1 => "kırmızı", 2 => "yeşil", 3 => "kırmızı"];

$result = array_search("kırmızı", $dizi);
echo $result; #Output : 1

array_key_exists()

Belirtilen anahtar veya indis dizi içerisinde var mı diye bakar.
Bulursa true ya da indis bilgisini döndürür, bulamazsa false döndürür.

$dizi = ["birinci" => 1, "ikinci" => 5];
if(array_key_exists("birinci", $dizi)){
    echo "'birinci' dizide var.";
}

in_array()

Bir dizi içerisinde bir değerin varlığını araştırır. Aranılan değer varsa true, yoksa false döner.

$is = ["Mac", "NT", "Irix", "Linux"];
if(in_array("NT", $is)){
    echo "NT var.";
}

min()

Bir dizi ya da aldığı parametreler içerisindeki en düşük değeri bulur ve döndürür.

$dizi = [5,7,9,1,3,4];
echo min($dizi); #Output: 1

echo min(8, 12, 5, 9, 3); #Output: 3

max()

Bir dizi ya da aldığı parametreler içerisindeki en yüksek değeri bulur ve döndürür.

$dizi = [5,7,9,1,3,4];
echo max($dizi); #Output: 9

echo max(8, 12, 5, 9, 3); #Output: 12

array_count_values()

Bir dizi içerisindeki tüm değerleri sayar ve hangi değerden kaç tane olduğunu bir dizi olarak döndürür.

$dizi = [0 => "mavi", 1 => "kırmızı", 2 => "yeşil", 3 => "kırmızı"];

$result = array_count_values($dizi);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [mavi] => 1
    [kırmızı] => 2
    [yeşil] => 1
)

array_flip()

Bir dizi içerisindeki anahtarlar ile değerleri yer değiştirir. Yani anahtarları değer, değerleri ise anahtar yapar.

$dizi = [0 => "mavi", 1 => "kırmızı", 2 => "yeşil", 3 => "kırmızı"];

$result = array_flip($dizi);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [mavi] => 0
    [kırmızı] => 3
    [yeşil] => 2
)

Bir değer birden fazla elemanda yer alıyorsa değer olarak sonuncusunun anahtarı kullanılır, diğerlerinin anahtarları silinir.


Dizi’de Matematik

array_sum()

Bir dizideki değerlerin toplamını hesaplar.

$dizi = [4, 25, 9];

$result = array_sum($dizi);
echo $result; #Output: 38

array_product()

Bir dizideki değerlerin çarpımını bulur.

$dizi = [4, 25, 9];

$result = array_product($dizi);
echo $result; #Output: 900

array_rand()

Bir dizi içerisinden rasgele bir ya da daha fazla anahtar döndürür.

İlk parametre olarak diziyi alır.
İkinci parametre olarak kaç tane anahtar döndürüleceği belirtilir. İkinci parametre belirtilmez ise 1 anahtar döndürür.

$dizi = ["Neo", "Morpheus", "Trinity", "Cypher", "Tank"];

$bir_tane_sec = array_rand($dizi);
echo $bir_tane_sec . "\n";

$result = array_rand($dizi, 3);
print_r($result);

Yukarıdaki örneğin çıktısı şuna benzer;

4
Array
(
    [0] => 0
    [1] => 1
    [2] => 3
)

Dizilerde Sıralama

array_reverse()

Bir diziyi tersine sıralayıp döndürür. İkinci parametre olarak true belirtilmezse sayısal anahtarlar korunmaz.

$dizi = ["a" => "mavi", "b" => "sarı", 3 => "kırmızı", 4 => "yeşil"];

$result = array_reverse($dizi);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => yeşil
    [1] => kırmızı
    [b] => sarı
    [a] => mavi
)

shuffle()

Bir dizinin elemanlarını rasgele sıralar. Anahtar değerleri korunmaz. Kriptografi amaçlarına uygun olmayan bir rasgele sayı üretici kullanır. Başarı durumunda true, başarısızlık durumunda false döner.

$dizi = ["a" => "mavi", "b" => "sarı", 3 => "kırmızı", 4 => "yeşil"];

$result = shuffle($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı şuna benzer;

Array
(
    [0] => yeşil
    [1] => kırmızı
    [2] => sarı
    [3] => mavi
)

ksort(), krsort(), sort(), rsort(), asort(), arsort() fonksiyonlarında aşağıdaki sıralama seçenekleri kullanılabilir.

  • SORT_REGULAR – öğeler normal olarak karşılaştırılır,
  • SORT_NUMERIC – öğeler sayısal olarak karşılaştırılır.
  • SORT_STRING – öğeleri dizesel olarak karşılaştırılır.
  • SORT_LOCALE_STRING – öğeler geçerli yerele göre dizesel olarak karşılaştırılır.
  • SORT_NATURAL – natsort() fonksiyonundaki gibi öğeler “doğal sıralama” kullanılarak dizgesel olarak karşılaştırılır.
  • SORT_FLAG_CASE – dizeleri harf büyüklüğüne duyarsız sıralar.

SORT_STRING veya SORT_NATURAL ile bitsel VEYAlanabilir.

ksort()

Bir diziyi anahtarlarına göre küçükten büyüğe doğru sıralar.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

ksort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [a] => mavi
    [B] => sarı
    [0] => siyah
    [3] => kırmızı
    [4] => yeşil
)

İkinci parametre olarak şeçenekler kullanılarak sıralama davranışını değiştirebilirsiniz.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

ksort($dizi, SORT_LOCALE_STRING);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => siyah
    [3] => kırmızı
    [4] => yeşil
    [B] => sarı
    [a] => mavi
)

krsort()

Bir diziyi anahtarlarına göre büyükten küçüğe doğru sıralanır. ksort() fonksiyonunda kullanılan sıralama seçenekleri bu fonksiyonda da aynı amaçla kullanılabilir.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

krsort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [4] => yeşil
    [3] => kırmızı
    [a] => mavi
    [B] => sarı
    [0] => siyah
)

sort()

Bir dizinin değerlerini küçükten büyüğe doğru sıralar, bu fonksiyon anahtarları korumaz.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

sort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => kırmızı
    [1] => mavi
    [2] => sarı
    [3] => siyah
    [4] => yeşil
)

rsort()

Bir dizinin değerlerini büyükten küçüğe doğru sıralar, bu fonksiyon anahtarları korumaz.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

rsort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => yeşil
    [1] => siyah
    [2] => sarı
    [3] => mavi
    [4] => kırmızı
)

asort()

Bir dizinin değerlerini anahtarlarıyla ilişkilerini bozmadan küçükten büyüğe doğru sıralar.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

asort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [3] => kırmızı
    [a] => mavi
    [B] => sarı
    [0] => siyah
    [4] => yeşil
)

arsort()

Bir dizinin değerlerini anahtarlarıyla ilişkilerini bozmadan büyükten küçüğe doğru sıralar.

$dizi = ["a" => "mavi", "B" => "sarı", 0 => "siyah", 3 => "kırmızı", 4 => "yeşil"];

arsort($dizi);
print_r($dizi);

Yukarıdaki örneğin çıktısı;

Array
(
    [4] => yeşil
    [0] => siyah
    [B] => sarı
    [a] => mavi
    [3] => kırmızı
)

natsort()

Bir diziyi “doğal sıralama” algoritması ile sıralar. Bu fonksiyon, abecesayısal (alfanumeric) dizeleri, insanların anahtar değer ilişkisini sağlayarak yaptıkları şekilde gerçekleyen bir sıralama algoritmasını kullanarak sıralar. Bu algoritmaya “doğal sıralama” algoritması adı verilir.

$dizi1 = $dizi2 = ["img12.png", "img10.png", "img2.png", "img1.png"];

//Standart sıralama
asort($dizi1);
print_r($dizi1);


//Doğal sıralama
natsort($dizi2);
print_r($dizi2);

Yukarıdaki örneğin çıktısı;

Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

natcasesort()

Bir diziyi harf büyüklüğüne duyarsız “doğal sıralama” algoritmasıyla sıralar. Bu fonksiyon natsort() fonksiyonu ile aynı işe harf büyüklüğüne duyarsız şekilde yapar.

$dizi1 = $dizi2 = ["img12.png", "IMG0.png", "img10.png", "img2.png", "img1.png", "IMG3.png"];

sort($dizi1);
print_r($dizi1);

natcasesort($dizi2);
print_r($dizi2);

Yukarıdaki örneğin çıktısı;

Array
(
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img10.png
    [4] => img12.png
    [5] => img2.png
)
Array
(
    [1] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [0] => img12.png
)

array_multisort()

Çok sayıda diziyi ya da çok boyutlu bir diziyi sıralamak için kullanılır. Kullanım şekli biraz karmaşık gelebilir o yüzde bu fonksiyonu biraz daha detaylandıracağım.

Alabildiği parametreler ile kullanım şekli şu;

array_multisort(
    array $dizi1,
    mixed $dizi1_sıralama_düzeni = SORT_ASC,
    mixed $dizi1_sıralama_seçeneleri = SORT_REGULAR,
    mixed ...$diğerleri
) : bool

Alabildiği parametreler;

dizi : Sıralanacak dizi

dizi1_sıralama_düzeni : Önceki dizi parametresine sıralamada kullanılacak düzen. Artan şekilde sıralamak için SORT_ASC, azalan şekilde sıralamak için SORT_DESC.

dizi1_sıralama_seçenekleri : Önceki dizi parametresi için sıralama seçeneklerini belirtir. Sıralama seçeneklerini daha önce yukarıda paylaşmıştım.

diğerleri : Diğer diziler; ardından isteğe bağlı olarak sıralama düzeni ve sıralama seçenekleri parametreleri belirtilir. Yalnızca önceki dizilerdeki eşdeğer öğelere karşılık gelen öğeler karşılaştırılır. Başka bir deyişle, sıralama sözlükbilimseldir.

$dizi1 = [10, 100, 100, 0];
$dizi2 = [1, 3, 2, 4];

array_multisort($dizi1, $dizi2);
print_r($dizi1);
print_r($dizi2);

Bu örnekte sıralama sonrasında iki dizi arasındaki elemanlar yerlerine göre birbirinin karşıtı olmak üzere ilk dizi 0, 10, 100, 100; ikinci dizi 4, 1, 2, 3 içerir. Yukarıdaki örneğin çıktısı;

Array
(
    [0] => 0
    [1] => 10
    [2] => 100
    [3] => 100
)
Array
(
    [0] => 4
    [1] => 1
    [2] => 2
    [3] => 3
)

Birden fazla dizide sıralama düzeni ve sıralama seçenekleri ile belirterek şu şekilde kullanım yapılabilir;

$dizi1 = ["10", 11, 100, 100, "a"];
$dizi2 = [1, 2, "2", 3, 1];

array_multisort($dizi1, SORT_ASC, SORT_STRING,
                $dizi2, SORT_NUMERIC, SORT_DESC);

var_dump($dizi1);
var_dump($dizi2);

Bu örnekte sıralama sonrasında, ilk dizi “10”, 100, 100, 11, “a” dizisine dönüşecek (artan düzende dizesel olarak sıralanır), ikinci dizi ise 1, 3, “2”, 2, 1 değerlerini içerecektir (azalan düzende sayısal olarak sıralanır).

array(5) {
  [0]=>  string(2) "10"
  [1]=>  int(100)
  [2]=>  int(100)
  [3]=>  int(11)
  [4]=>  string(1) "a"
}
array(5) {
  [0]=>  int(1)
  [1]=>  int(3)
  [2]=>  string(1) "2"
  [3]=>  int(2)
  [4]=>  int(1)
}

Dizilerde Diğer Kullanışlı İşlevler

array_unique()

Dizi içerisinde tekrarlanan değerleri siler ve bir dizi olarak döndürür.

$dizi = ["a" => "yeşil", "kırmızı", "b" => "yeşil", "mavi", "kırmızı"];

$result = array_unique($dizi);
print_r($result);

Yukarıdaki kodun çıktısı;

Array
(
    [a] => yeşil
    [0] => kırmızı
    [1] => mavi
)

array_change_key_case()

Bir dizideki tüm anahtarların harflerinin tümünü büyük harfe ya da küçük harfe dönüştürür. Sayısal indislere dokunulmaz.

CASE_LOWER – Küçük harfe dönüşüm yapar. (Öntanımlı)
CASE_UPPER – Büyük harfe dönüşüm yapar.

$dizi = ["Saat" => 4, "dakika" => 25];

$result = array_change_key_case($dizi, CASE_UPPER);
print_r($result);

Yukarıdaki örneğin çıktısı;

Array
(
    [SAAT] => 4
    [DAKIKA] => 25
)

Bir Cevap Yazın