"Enter"a basıp içeriğe geçin

PHP array_column Fonksiyonu

Merhabalar,

Üzerinde çalıştığım bir sistemde elimde şu şekilde bir dizi vardı:

$questions = [
  [
    'text' => 'Adınız?',
    'inputType' => 'text',
  ],
  [
    'text' => 'Kendinizden biraz bahseder misiniz?',
    'inputType' => 'textarea',
  ],
  [
    'text' => 'Yaşınız?',
    'inputType' => 'number',
  ],
];

Diziyi okuduğunuzda da tahmin edebileceğiniz gibi bu dizi, içerisinde sorular ve bu soruların sorulacağı inputların tipini tuttuğum bir dizi.

Bu diziye göre formumu oluşturuyordum ve kullanıcıdan cevapları alıyordum. Cevapları aldıktan sonra $answers adında bir değişkene aktarıyordum. Buraya gelene kadar her şey çok iyiydi ancak sonrasında şöyle bir şeye ihtiyaç duydum. Soruları ve cevapları içerisinde barındıran bir dizi oluşturmam gerekiyordu ve bu dizinin indexleri soruların metinleri olacaktı, değerleri de soruların cevapları olacaktı. Bunları array_combine ile kolay bir şekilde yapabilirdim ancak öncelikle questions dizimin içerisindeki dizilerin sadece text keyine sahip değerlerini çekip onlardan yeni bir dizi oluşturmalıydım. Biraz toparlamak gerekirse eğer yukarıda gördüğünüz questions dizimi şu hale getirmeliydim:

[
  'Adınız?',
  'Kendinizden biraz bahseder misiniz?',
  'Yaşınız?',
];

Bunu nasıl yapacağımı araştırırken array_column fonksiyonunu buldum. Dizi içerisinde dizileriniz varsa bunların içindeki belirli bir indexi alıp size yeni bir dizi döndürüyor. Şimdi canlı örneğe geçelim. Questions dizimi alalım ve bu dizi içerisindeki sadece textleri alalım. Bunun için yapmamız gereken şey array_column fonksiyonunun birinci parametresine dizimizi vermek ve ikinci parametresine de elde etmek istediğimiz indexi yazmak. Burada elde etmek istediğimiz index text olduğu için ikinci parametreye text yazıyoruz.

array_column fonksiyonu mevcut dizimiz üzerinde herhangi bir değişiklik yapmıyor. Bize yeni bir dizi döndürüyor. Bu yüzden array_column fonksiyonundan dönen değeri bir değişkene aktarmamız gerekiyor. Şimdi bu söylediklerimiz havada kalmasın ve kodumuzu yazalım ve yeni dizimizi ekrana bastırıp sonuca bakalım.

$questions = [
  [
    'text' => 'Adınız?',
    'inputType' => 'text',
  ],
  [
    'text' => 'Kendinizden biraz bahseder misiniz?',
    'inputType' => 'textarea',
  ],
  [
    'text' => 'Yaşınız?',
    'inputType' => 'number',
  ],
];

$questionTexts = array_column($questions, 'text');
var_dump($questionTexts);

Bu kodu çalıştırdığımızda şu şekilde bir sonuç almış olmamız gerekiyor.

Gördüğünüz gibi fonksiyonumuz dizi içerisindeki sadece text keyine sahip verileri aldı ve bunlardan yeni bir dizi oluşturup bunu bize döndürdü.

Temel olarak kullanımı bu şekilde. Şimdi ekstra özelliklere bakalım ama bunun için daha farklı bir örnek dizi ile çalışsak daha iyi olacak. Yeni dizimiz şu şekilde olsun:

$records = [
	[
		'id' => 2135,
		'first_name' => 'John',
		'last_name' => 'Doe',
	],
	[
		'id' => 3245,
		'first_name' => 'Sally',
		'last_name' => 'Smith',
	],
	[
		'id' => 5342,
		'first_name' => 'Jane',
		'last_name' => 'Jones',
	],
	[
		'id' => 5623,
		'first_name' => 'Peter',
		'last_name' => 'Doe',
	],
];

Yeni dizimiz bu şekilde. Şimdi ben şöyle bir şey yapmak istiyorum. array_column ile bu dizideki sadece first_name değerlerini alayım ama yeni oluşturulan dizideki elemanlar indexe de sahip olsun ve bu index id’ye eşit olsun. Yani istediğim şey aslında şu diziyi elde etmek:

[
  2135 => 'John',
  3245 => 'Sally',
  5342 => 'Jane',
  5623 => 'Peter',
];

Bu şekilde elimdeki bir kolonu value olarak atamak ve başka bir kolonu da key olarak atamak istersem array_column fonksiyonuna üçüncü bir parametre vermem gerekiyor. Bu parametre ile de hangi değeri key olarak kullanmak istediğimizi belirtiyoruz. Burada id değerini key olarak kullanmak istediğimizi belirtmemiz gerekiyor. Şimdi kodumuzu baştan yazalım.

$records = [
	[
		'id' => 2135,
		'first_name' => 'John',
		'last_name' => 'Doe',
	],
	[
		'id' => 3245,
		'first_name' => 'Sally',
		'last_name' => 'Smith',
	],
	[
		'id' => 5342,
		'first_name' => 'Jane',
		'last_name' => 'Jones',
	],
	[
		'id' => 5623,
		'first_name' => 'Peter',
		'last_name' => 'Doe',
	],
];

$users = array_column($records, 'first_name', 'id');

var_dump($users);

Bu kodu çalıştırdığımızda şu sonucu almış olmanız gerekiyor:

Gördüğünüz gibi id değerlerimiz key olarak geldi ve first_name değerlerimiz de value olarak geldi.

array_column fonksiyonu sadece dizilerle sınırlı değil. İsterseniz tıpkı dizilerde kullandığınız gibi sınıflarda da kullanabilirsiniz. Bunu anlatmayacağım, sadece ufak bir kod bırakıyorum, siz nasıl kullanıldığını anlayacaksınız zaten.

class User
{
  public $username;

  public function __construct($username) {
    $this->username = $username;
  }
}

$users = [
  new User('Yağız'),
  new User('Zahid'),
  new User('Baran'),
  new User('Mustafa'),
  new User('Efe'),
];

$usernames = array_column($users, 'username');

var_dump($usernames);

Bu yazılık bu kadardı. Aklınıza takılan herhangi bir şey olursa bunu aşağıdan yorum olarak sorabilirsiniz. Herkese iyi çalışmalar dilerim.

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir