Explode komutunun yapabileceği işlemleri tek tek inceleyeceğiz. Bunun için php.net teki manuelden İlk başta komutun özelliklerini inceleyelim.
Explode komutu verilen metni parçalara ayırır. Yani diziye dönüştürür. Yalnız bu dönüştürme işlemini gerçekleştirirken verilen ifadeye göre parçalar. Genel kullanımına baktığımızda bir metin değişkeni veririz. Ve bunun yanında birtane ayıraç veririz. Üçüncü parametresi olarak limit şeklinde parametre alır.
İşte burda paremertre olarak verilen ayıraç verilen metni bölmemizde kullanılan ifadedir. Limit ise bu parçalama işleminde ne kadar parçalara bölüneceği yani bu oluşturulan parçaların kaç tanesinin bize göstereceğini temsil ediyor.
Şimdi uygulama şeklinde tek tek komutun yapabildiklerini inceleyelim.
Birtane a.php adında sayfa oluşturuyorum. Explode komutu ile bir çok işlem yapabiliriz. Mesela birden fazla satırsan oluşan bir metinde istedigimiz satırı alabilir. Metin içerisindeki bir ifadenin başlangıç ve bitiş değerlerine göre içinden bir metni sıyırabiliriz.Komutun temel işlevlerini tek tek inceleyelim. İlk başta explode komutunu yazarken ayıracı temsil ediyorum. Ayıracımızın boşluk olduğunu düşünelim daha sonra parçalamam gereken metni belirtmemiz gerekiyor.Bunun için buraya metin isminde bir ifade tanımlayalım
<?php
$metin = "deger1 deger2 deger3 deger4 deger5";
$data = explode(" ",$metin);
print_r($data);
?>
Array
(
[0] => deger1
[1] => deger2
[2] => deger3
[3] => deger4
[4] => deger5
)
ikinci parametre olarak hemen yukarda tanımladığım ifadeyi verdim şimdilik üçüncü parametreyi esgeçiyorum. İşte burdan gelen değeri $data isminde bir diziye atadığımızı düşünelim daha sonra dizinin tamamını yazdırmak için prinnt_r komutunu çalıştırıyorum işte metinde belirttiğimiz ifade arasındaki boşluklar baz alınarak metin parçalara bölüncek ki ayıracımız şuan boşluk şeklinde daha sonra bu parçalar bir dizi olarak $data değişkenine tanımlanacaktır işte biz bu parçayı browserdan çağırdığımızda bir dizi döndüşünü ve Sıfırıncı elemanını deger1 birinci elemanının deger2 ikinci elemanın deger3 üçüncü elemanın deger4 ve dördüncü elemanında deger5 şeklinde devam ettiğini görüyoruz.
Düzeltme: sözle sıra ile söylerken üçüncü eleman deger4 yerine dördüncü eleman denmiştir.Metin ifade doğrudur
Bildiğimiz üzere dizinin ilk indisi sıfır.
İşte ben burdan eğer ki herhangi birini almak istiyorsam mesela benim için üçüncüsü gerekliyse, sıfır, bir, iki indisli değeri alırsam böylece direk elime deger1 geçmiş oldu
Düzeltme: cümlede bahsedildiği gibi üçünçü değer için indis numarası aşağıda sıfır değil 2 verilmelidir.
<?php
$metin = "deger1 deger2 deger3 deger4 deger5";
$data = explode(" ",$metin);
$data = $data[0];
echo $data
?>
İşte explode fonksiyonu ile verdiğim herhangi bir ayıraca göre metni parçalara bölebilirim explode fonksiyonumuzun üçüncü parametresi olan limit değerini inceleyecek olursak pozitif vermem durumunda verdiğim limite kadarki parçalar getirilir ve verdiğim limitten sonraki kısım tek parça halinde metin olarak döner Yani bunu iki olarak tanımlayalım ve sonucunu görelim.
<?php
$metin = "deger1 deger2 deger3 deger4 deger5";
$data = explode(" ",$metin,2);
print_r($data);
?>
Evet 1,2 ve ifadenin tamamı tek metin halinde bize döndü
Array
(
[0] => deger1
[1] => deger2 deger3 deger4 deger5
)
İşte buraya verdiğim değer ilk parçalamanın şurda olduğunu düşünürsek ikinci parçalama gerçekleşmedi ve metnin tamamı olduğu gibi bize dönderildi. Limit değeri burda negatif değerde alabilir. Negatif değer verdiğimizde ise Dikkat edersek pozitif değerde verdiğimiz değerden sonraki kısım olduğu gibi bize dönderilmişti.
Array
(
[0] => deger1
[1] => deger2
[2] => deger3
[3] => deger4
)
Bu sefer ama sayfayı yenilediğimizde sondan olmak üzere verdiğimiz değere göre son parçanın gelmediğini görüyoruz dikkat edersek deger5 şeklinde bir ifademiz daha vardı ama sadece bize deger4 de kadar ifadeler döndü
İşte explode fonksiyonu ile genelde zaten limit pek kullanılan bir parametre değildir ve opsiyonel olduğunu unutmayalım temel işlevsel olarak bir ayıraç veririz ve bu ayıraca göre metin ifade parçalara bölünüp dizi haline dönüştürülür daha sonra dizi üzerinde bizim için gerekli indisi almak suretiyle her türlü işlem yapabiliriz mesela burdaki yazımızın arasında virgüller olduğunu düşünürsek biz bu ifadeyi parçalamak için bu sefer ayıracımıza virgül dememiz lazım. dikkat edersek şu an her ifadenin arasında virgül ve boşluk var.
<?php
$metin = "deger1, deger2, deger3, deger4, deger5";
$data = explode(", ",$metin);
print_r($data);
?>
işte ben virgül ve boşluğa göre parçalama işlemini gerçekleştirirsem yine aynı sonucu aldığımı görüyoruz explode komutu farklı işlevlerde kullanılabilir. Mesela bir linux sistemde yada unix sistemde passwd isminde kullanıcıların bilgilerinin tutulduğu dosyaya gözatalım.
passwd dosyası
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
Dikkat ederseniz her bir satır yani enter karakteri satırların ayıracıyken her bir paremetrenin arasında da iki nokta işareti yer alıyor. Linux kullanan kişiler bilirki bu dosyada ilk parametre kullanıcı adını ikinci parametre şifreyi yani parolayı yalnız burda x belirtildiği için bu crypt passwd dosyasında değil shadow dosyasında tutulduğunu temsil ediyor. Üçüncü parametre userid dördüncü parametre groupid Bir sonraki parametre kullanıcının açıklaması olan satır bundan sonra gelen parametre kullanıcının home dizini ve son parametrenin bu kullanıcının çalıştırabileceği kabuk sistemi olduğunu biliyoruz. İşte biz bu dosyadan herhangi değerleri almak istiyorsak explode bizim için biçilmiş bir kaptandır. Bu metni olduğu gibi alarak a.php dosyama taşıdığımı düşünelim
Artık metin ifademiz farklı bir değer almış oldu.
<?php
$metin = "root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin";
?>
Şimdi adım adım gitmek için bu komutu tek tek explode komutu ile inceleyeceğim. Şimdi ilk başta explode komutu ile enter karakterine göre parçalama işlemini gerçekleştirmek istiyorum. Bunun için slaş n yani enter karakterini parçalama ayıracı olarak veriyorum. Metinde burda verdiğim ifade. şimdi ben sıfırıncı indisi yazdır dediğimde bu ifadenin sıfırıncı yani ilk enter a kadarki kısmı ilk ifade olduğu için teorikte de zaten o satırı görmem gerekiyor.
<?php
$metin = "root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin";
$data = explode("\n",$metin);
echo $data[0];
?>
Evet sayfayı yenilediğimizde ilk satırı yakaladığımızı görüyoruz.
root:x:0:0:root:/root:/bin/bash
İlk satırı burda aldık. tekrar kodlarımıza dönersek artık satır üzerinde işlem yapabiliriz. Benim için şu an ilk satırın gerekli olduğunu düşünürsem $data = $data[0]; diyerek ilk satırı artık $data değişkenime atayabilirim. Dikkat edersek her satırda da arada iki nokta şeklinde ayıracımız mevcut.
İşte bu iki noktaya göre tekrar explode işlemini gerçekleştirerek her satırdaki değeri tek tek almamızda mümkün Burda farklı bir yaklaşımla list fonksiyonunuda kullanabiliriz. List fonksiyonuna sırası ile yazdığımız değişkenler. Dizinin sıfırıncı indisi yani ilkinden başlamak üzere tek tek atama işlemi gerçekleşmiş olur. Linux sistemdeki passwd dosyamızın her bir satırının nasıl formatlandığını az önce bahsetmiştim. İşte burdaki formatlanmış değerleri değişkenlere atamam gerekirse Kullanıcı adı, şifre, userid, group id, user info, ve ev klasörü ,komut bu şekilde atamayı yapabilirim. Daha sonra herhangi bir değişkeni yazdırarak sadece istediğim yeri alabilirim.
<?php
$metin = "root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin";
$data = explode("\n",$metin);
$data = $data[0];
list($user, $pass, $userid, $groupid, $userinfo, $homedir, $cmd) = explode(":",$data);
echo $user;
?>
işte bu işlemi bir döngü içerisinde kullandığımızı düşünürsek bu dosyadan sadece kullanıcı bilgilerini almamızda mümkün. Evet böyle bir döngü gerçekleştirerek kodumuzu çalıştırdığımnızda
<?php
$metin = "root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin";
$data = explode("\n",$metin);
for($i=0; $i<count($data); $i++){
list($user, $pass, $userid, $groupid, $userinfo, $homedir, $cmd) = explode(":",$data[$i]);
echo $user."<br />";
}
?>
Dosyadan kullanıcı değerlerini alabildiğimi görüyoruz.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
gopher
ftp
nobody
İşte explode komutu ile belli değerleri gözönüne alarak parçalama işlemi yapmak suretiyle diziden istediğim değerlere erişebilirim.