Dizi (array) de*i*kenleri

Download Report

Transcript Dizi (array) de*i*kenleri

Dizi (array) değişkenleri
Dizi değişkenleri
●
●
Dizi değişkenleri oluşturulan bir değişkene sınırsız sayıda veri
tanımlamaya yarayan bir değişken sistemidir.
PHP de dizi değişkeni yaratmak:
<?php
$dizi=array();
$dizi[0]=5;
$dizi[1]=6;
$dizi[2]=7;
$dizi[3]="napan";
// aşağıdaki şekildede yaratılabilir
$aynidizi=array(5,6,7,"napan");
?>
Dizi değişkeni
<?php
●
Array
●
(
$dizi=array();
$dizi[0]=5;
Çıktısı =>
●
[0] =>5
●
[1] =>6
●
[2] =>7
●
[3] =>napan
$dizi[1]=6;
$dizi[2]=7;
$dizi[3]="napan";
$aynidizi=array(5,6,7,"napan");
echo "<pre>"; /* burada formatlı
çıktı yaratmak için kullanılır.*/
●
)
●
Array
●
(
print_r($dizi); /* print_r dizi
değişkenleri tüm elemanlarıyla
yazdırır.*/
print_r($aynidizi);
●
[0] =>5
●
[1] =>6
●
[2] =>7
●
[3] =>napan
echo "</pre>";
?>
●
)
Anahtarı bilmeden dizi değişkene değer atama
●
Eğer sayısal bir anahtar kullanıyor ve en son hangi anahtarda
kaldığımız hatırlamıyorsak boş köşeli parantez bir sonraki sayısal boş
anahtarı kullanacaktır.
<?php
$dizi=array();
$dizi[0]=5;
$dizi[1]=6;
$dizi[]=7;
$dizi[]=8;
?>
●
Yukarıdaki örnekte anahtar 7 değeri için 2 ve 8 değeri için 3 otomatik
olarak atanacaktır.
Dizi değişkeni
<?php
$aynidizi=array(5,6,7,"napan");
?>
Yukarıda yapılan tanımlamada dizi değişken anahtarı (index) sifirdan
başlar.
●
<?php
$dizi=array();
$dizi[5]=2;
$dizi["isim"]="Emre";
$dizi[102]="X";
?>
●
●
Yukarıdaki örnekte anahtarları biz belirledik. Dizi içerisinde 3 adet
eleman vardır, anahtarları bizim tarafımızdan belirlenmiştir.
PHP dilinde anahtarların alışılan diğer dillerdeki gibi sıralı ya da
sayısal olması gerekmez. Sadece ondalık sayılar(örnek: 9.5)
anahtar(index) olarak kullanılamaz.
Dizi değişkeni
<?php
$müsteriler=array();
$müsteriler["adi"]="Emre";
$müsteriler["soyadi"]="Ozen";
$müsteriler["eposta"]="[email protected]";
?>
Yukarıdaki örnek hatasız bir örnektir.
Anahtarı bilmeden dizi değişkene değer atama
●
Eğer sayısal bir anahtar kullanıyor ve en son hangi anahtarda
kaldığımız hatırlamıyorsak boş köşeli parantez bir sonraki sayısal boş
anahtarı kullanacaktır.
<?php
$dizi=array();
$dizi["adi"]="Emre";
$dizi["soyadi"]="Ozen";
$dizi[]=55;
$dizi["eposta"]="Ozen";
?>
●
●
Yukarıdaki örnekte anahtar 55 değeri için 0 olarak, otomatik olarak
atanacaktır.
array_push($dizi,55); de aynı işlemi yapan öntanımlı bir fonksiyondur.
Dizi değişkenini anahtarını belirterek atama
<?php
$dizi=array(0=>55,1=>"Emre","X"=>56);
echo "<pre>";
print_r($dizi);
echo "<pre>";
?>
●
Yukarıdaki script'in çıktısı:
Array
(
[0]=>55
[1]=>Emre
[X]=>56
)
Çok boyutlu dizi değişkenleri
●
●
Çok boyutlu dizi değişkeni, bir anahtar içerisinde değer yerine yeni bir
dizi tanımlanması ile oluşur.
Örneğin:
<?php
$ikiboyut=array();
$ikiboyut[1]=array();
$ikiboyut[1][0]=3;
$ikiboyut[1][1]=8;
$ikiboyut[1][2]=77;
$ikibouyut[2]=array();
$ikiboyut[2][0]=55;
$ikiboyut[2][1]="Emre";
$ikiboyut[2][5]=8;
?>
●
PHP de ikinci boyutlardaki eleman sayılarınınveya anahtarlarının eşit
olması zorunluluğu yoktur.
●
Önceki slayttaki örneğin bir diğer yazılışı:
<?php
$ikiboyut=array(1=>array(3,8,77),2=>array(0=>55,1=>"Emre",5=>8));
echo "<pre>";
print_r($ikiboyut);
echo "</pre>"; ?>
●
print_r fonksiyonu boyut ne olursa olsun sonucu döndürür.
●
Yukarıdaki script'in çıktısı:
●
Array(
●
[1]=>Array(
●
●
●
[0]=>3
●
[1]=>8
●
[2]=>77
●
)
[2]=>Array(
)
●
[0]=>55
●
[1]=>Emre
●
[5]=>8
●
)
Çok boyutlu dizi değişkenleri
Dizi değişkenlerini listeleme
●
●
●
Eğer dizi değişkeninin anahtarları sıralı sayı ise:
Count() ön tanımlı fonksiyon ile değer sayısı alınır ve döngü içerisinde dizi değişken
elemanlarına tek tek ulaşılabilir.
Örneğin:
<?php
$d=array();
$d[0]="a";
$d[1]="b";
$d[2]="c";
$d[3]="d";
$sayi=count($d);
for($i=0;$i<$sayi;$i++)
echo "\$d[$i] -> {$d[$i]} <br/>"; ?>
●
Çıktısı:
$d[0]->a
$d[1]->b
$d[2]->c
$d[3]->d
Dizi değişkenlerini listeleme
●
●
Eğer dizi değişkeninin anahtarları bilinmiyor ise:
Count() değer sayısını döndürür fakat bu sayı anahtar (index) olarak kullanılamaz. Bu
tip durumlarda foreach döngüsü kullanılır.
●
Bu döngü her dizi elemanı için otomatik olarak bir kere çalışır.
●
Örneğin:
<?php
$d=array("a","b","c","d"); // her eleman için sadece değeri döner
foreach($d as $deger)
echo $deger.","; ?>
●
Çıktısı:
a,b,c,d,
<?php
$d=array("a","b","c","d");
foreach($d as $anahtar=>$deger) // her eleman için anahtar ve değeri döner
echo $anahtar." - ".$deger.",";
?>
●
Çıktısı:
0-a,1-b,2-c,3-d,
Dizilerde Sıralama
●
●
PHP, dizileri sıralamak için kullanılabilen çeşitli işlevlere sahiptir ve bu
belgede bunların kullanımları ele alınmıştır.
Bu işlevler arasındaki başlıca farklar şunlardır:
●
●
●
Bazı sıralama işlemleri dizilerin anahtarlarına göre
yapılırken bazılarında değerlere göre yapılır:
$dizi['anahtar'] = 'değer';
Anahtarların sayısal olarak ele alındığı durumda
sıralama sonrası anahtarlarla değerleri arasındaki ilişki
bozulmuş olabilir de olmayabilir de.
Sıralama çeşitleri: abecesel, küçükten büyüğe (artan),
büyükten küçüğe (azalan), sayısal, doğal, rasgele,
kullanıcı tanımlı
Dizilerde Sıralama komutları
Sort ve Natsort arasındaki fark
<?php
$array1 = $array2 = array("img12.png", "img10.png",
"img2.png", "img1.png");
Standart sıralama
sort($array1);
echo "Standart sıralama\n";
print_r($array1);
natsort($array2);
echo "\nDoğal sıralama\n";
print_r($array2);
?>
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)
Doğal sıralama
Array
(
[3] => img1.png
[2] => img2.png
[1] => img10.png
[0] => img12.png
)
arsort ve asort
<?php
$array= array("z"=>"Melek", "k"=>"Hasan", "a"=>"Tezel",
"c"=>"Emre");
AR Sort
Array
arsort($array);
(
echo "AR sort<br/>";
[a] => Tezel
[z] => Melek
print_r($array);
[k] => Hasan
[c] => Emre
asort($array);
echo "A sort<br/>";
print_r($array);
?>
)
A Sort
Array
(
[c] => Emre
[k] => Hasan
[z] => Melek
[a] => Tezel
)
krsort ve ksort
<?php
$array= array("z"=>"Melek", "k"=>"Hasan", "a"=>"Tezel",
"c"=>"Emre");
KR Sort
Array
krsort($array);
(
echo "AR sort<br/>";
[z] => Melek
[k] => Hasan
print_r($array);
[c] => Emre
[a] => Tezel
ksort($array);
echo "A sort<br/>";
print_r($array);
?>
)
k Sort
Array
(
[a] => Tezel
[c] => Emre
[k] => Hasan
[z] => Melek
)
rsort ve sort
<?php
$array= array("Melek", "Hasan", "Tezel","Emre");
rsort($array);
R Sort
Array
echo "R sort<br/>";
(
print_r($array);
[0] => Tezel
sort($array);
echo "Sort<br/>";
print_r($array);
?>
Bu örneğin çıktısındaki anahtarlara
Dikkat edelim
[1] => Melek
[2] => Hasan
[3] => Emre
)
Sort
Array
(
[0] => Emre
[1] => Hasan
[2] => Melek
[3] => Tezel
)
<?php
// Karşılaştırma işlevi
function karş($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
uasort
// Sıralanacak dizi
$dizi = array('a' => 4, 'b' => 8, 'c' => -1,
'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3,
'h' => -4);
print_r($dizi);
// Sıralayıp sonucu basalım
uasort($dizi, 'karş');
print_r($dizi);
?>
Çıktı:
Array (
[a] => 4
[b] => 8
[c] => -1
[d] => -9
[e] => 2
[f] => 5
[g] => 3
[h] => -4
)
Array (
[d] => -9
[h] => -4
[c] => -1
[e] => 2
[g] => 3
[a] => 4
[f] => 5
[b] => 8 )
Dizi değişken içerisindeki aynı verileri listelemek.
●
●
Bu iş için kullanabileceğimiz ön tanımlı fonksiyon: array_intersect dir.
Bu fonksiyon değişik sayıda arrayi parametre olarak kabul edebilir.
Kullanılışı:
<?php
$dizi1=array(2,4,6,8,7,10);
$dizi2=array(11,2,9,7);
$dizi3=array(9,2,7);
$sonuc=array_intersect($dizi1,$dizi2,$dizi3);
print_r($sonuc); ?>
●
Çıktısı
Array
(
[0]=>2
[4]=>7
)
Dizi değişken içerisindeki farklı verileri listelemek.
●
●
Bu iş için kullanabileceğimiz ön tanımlı fonksiyon: array_diff dir.
Bu fonksiyon değişik sayıda arrayi parametre olarak kabul
edebilir.
Kullanılışı:
<?php
$dizi1=array("a"=>"green","red","blue","red");
$dizi2=array("b"=>"green","yellow","red");
$result=array_diff($dizi1,$dizi2);
print_r($result);?>
Çıktısı:
Array
(
[1] => blue
)
Dizi değişken içerisinde arama yapmak
●
Bu amaçla kullanabileceğimiz iki fonksiyon vardır.
●
in_array : varsa doğru yoksa yanlış döndürür.
●
array_search : varsa ilkinin anahtarını yoksa yanlış(false) döndürür.
<?php
$arr=array(3,45,6,89,9);
if (in_array(89,$arr))
echo 'dizi değişken içerisinde 89 mevcut.';
?>
<?php
$arr=array(1=>'Mağusa',2=>'Lefkoşa',3=>'Girne',4=>'Lefkoşa');
echo array_search('Lefkoşa',$arr); // sonuç 2 dir.
?>
Form İşlemleri
Formlar
●
●
Formlar, web sayfamıza gelen kullanıcılardan bilgi almamıza yarayan
nesnelerdir. HTML ile oluşturulurlar, işlenmek üzere PHP sayfalarına
gönderilirler.
Formlardan gelen veriyi iki değişik yöntemle işleyebiliriz.
●
●
GET ve POST
Formları kodlamak için HTML kullanırız.
GET Metodu
●
●
Internet sayfalarında adres satırından bilgi almak için kullanılan bir
yöntemdir.
Örneğin:
index.php?cins=haberler&no=1
? : değişken kısmının başladığını belirtir.
&: değişkenleri birbirinden ayırmaya yarar.
= : değişkene değerini atamak için kullanılır.
Get metodu adres satırını kullanır.
Aktarabileceği veri 4000 byte ile sınırlıdır. Buda dosyaları karşıdan
yüklemek (upload) için uygun değildir.
Adres satırı kullanıldığı için kullanıcı adı veya şifre gibi hassas verilerin
transferi için kullanılmaz(POST metodu kullanılır). (IE adres
satırındaki geçmişini hatırlar.)
GET Metodu
Örneğin:
●
index.php?cins=haberler&no=1
ile çağrılan sayfanın bu iki değişkenin değerlerini alabilmesi şu şekilde
olur:
<?php
echo 'Aranan cins='.$_GET['cins'].'<br/>';
$no=$_GET['no'];
echo 'Haberin numarası $no dir.';
?>
<?php
GET Metodu
if (isset($_GET['adi']) && ($_GET['adi']!=''))
{
echo "Merhaba <b>{$_GET['adi']} {$_GET['soyadi']}</b>";
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Adınız: <input type="text" name="adi"/> <br/>
Soyadınız: <input type="text" name="soyadi"/> <br/>
<input type="submit" value="Gönder"/>
</form>
<?php
}
Formun adının z.php olduğunu ve girilen değerlerin Emre
Ozen olduğunu varsayarsak. Adres çubuğundaki satır:
z.php?adi=Emre&soyadi=Ozen olarak görünür.
?>
Burada formun metodu GET ve alış yöntemi $_GET[] dir. Form elemanları <form> takısı
içerisinde bulunur. Bir sayfada birden fazla <form> takısı bulunabilir.
POST Metodu
●
●
●
Post metodunda veriler adres satırı ile değil http headers aracılığı ile
gönderilir.
Dosya aktarmaya (upload) uygun bir yöntemdir. Veri boyutu sınırı
sunucu tarafında php.ini dosyası aracılığı ile kontrol edilir.
Hassas verilerimiz için de GET metoduna nazaran daha güvenli ve
uygundur.
POST Metodu
<?php
if (!isset($_POST['kadi']) || ($_POST['kadi']=='')) // post değeri olup olmadığına bakılır
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Kullanıcı adı: <input type="text" name="kadi"/> <br/>
Şifre: <input type="text" name="sifre"/> <br/>
<input type="submit" value="Giriş Yap"/>
</form>
<?php
} else {
$kullanici='Emre'; $sifre='123456';
if ($_POST['kadi']==$kullanici && $_POST['sifre']==$sifre)
echo 'Giriş başarılı';
else
echo 'Kullanıcı adı veya şifreniz hatalı';
}?>
REQUEST komutu
●
●
●
Önceki örneklerimizde $_GET['....'] ve $_POST['...'] komutları yerine
(her iki metod için de) $_REQUEST[...] kullanılabilir.
Bütün form elemanlarını ziyaret etmek için foreach döngüsünden de
yararlanılablir.
Örneğin bir önceki POST metodu örneğimizde verilerin çıktısı
gezginimizde görebilmek için aşağıdaki döngü kullanılabilir:
foreach ($_POST as $anahtar=>$veri)
echo "$anahtar - $veri <br/>";