Setelah mempelajari perulangan for, while, dan do while, PHP menyediakan perulangan khusus array, yakni foreach. Dalam lanjutan tutorial PHP kali ini kita akan mempelajari cara penulisan perulangan foreach.
Pengertian Perulangan Foreach PHP
Array merupakan tipe data yang sering dipakai ketika membuat program di bahasa PHP. Kemampuan array yang bisa menyimpan banyak data dalam satu variabel sangat berguna untuk menyederhanakan dan menghemat penggunaan variabel.
Untuk menampilkan dan memproses data array, sebenarnya kita bisa memanfaatkan perulangan apa saja, termasuk perulangan for seperti contoh berikut:
<?php $nama = array("Andri", "Joko", "Sukma", "Rina", "Sari"); for ($i = 0; $i < 5; $i++) { echo "$nama[$i]"; echo "<br>"; }
Hasil kode program:
Andri Joko Sukma Rina Sari
Disini saya membuat perulangan for sebanyak 5 kali mulai dari $i = 0
sampai $i < 5
.
Tidak ada yang salah dengan cara ini. Akan tetapi PHP menyediakan cara alternatif untuk memproses array, yakni dengan perulangan foreach:
<?php $nama = array("Andri", "Joko", "Sukma", "Rina", "Sari"); foreach ($nama as $val) { echo "$val"; echo "<br>"; }
Perulangan foreach ini bisa menampilkan semua isi array dengan perintah yang lebih singkat dari pada perulangan for.
Cara Penulisan Perulangan Foreach PHP
Perulangan foreach adalah perulangan khusus untuk memproses array. Seperti yang telah kita bahas pada tutorial tipe data array PHP, setiap element array terdiri dari pasangan key dan value. Key merupakan posisi dari array, dan value merupakan nilai yang tersimpan.
Berikut format dasar perulangan foreach PHP:
foreach ($nama_array as $value) { // statement (...$value...) }
- $nama_array adalah nama dari variabel yang berisi array.
- $value adalah nama 'variabel perantara' yang berisi data array saat perulangan berjalan. Kita bebas memberi nama untuk variabel perantara ini, walaupun banyak programmer menggunakan $value, atau $val saja.
Berikut contoh perulangan foreach yang sudah kita coba sebelumnya:
<?php $nama = array("Andri", "Joko", "Sukma", "Rina", "Sari"); foreach ($nama as $val) { echo "$val"; echo "<br>"; }
Di baris 2 saya mendefinisikan variabel $nama dengan cara penulisan singkat array tanpa menulis key. Perulangan foreach ini akan diulang sesuai jumlah element yang tersimpan di array $nama.
Jika kita butuh mengakses key dari array, PHP menyediakan bentuk kedua dari perulangan foreach:
foreach ($nama_array as $key => $value) { // statement ($key... $value...) }
Perbedaan dengan format sebelumnya ada di variabel perantara kedua, yakni variabel $key. Variabel $key akan menampung nilai key array. Berikut contoh penggunaannya:
<?php $nama = array( 1 => "Andri", 6 => "Joko", 12 => "Sukma", 45 => "Rina", 55 => "Sari" ); foreach ($nama as $key => $val) { echo "Urutan ke-$key berisi data $val"; echo "<br>"; }
Kali ini array $nama memiliki key yang berbeda-beda. Di dalam perulangan foreach, nilai key bisa diakses dari variabel $key, sesuai yang ditulis pada baris 10.
Dalam tutorial ini kita sudah bahas cara penulisan dan penggunaan perulangan foreach dalam bahasa PHP.
Memproses array dengan perulangan foreach terasa lebih praktis daripada perulangan for, terlebih kita tidak perlu mencari tau berapa banyak perulangan harus dilakukan, karena perulangan foreach otomatis berhenti pada element terakhir.
Pada tutorial bahasa pemrograman PHP berikutnya kita akan mulai masuk ke materi tentang function, yang dimulai dengan membahas pengertian dan cara penggunaan function PHP.
Alhamdulillah, akhirnya paham juga apa itu key dan value, ternyata posisi array dan isi arraynya
Terimakasih :)
Terimakasih juga atas kunjungannya gan…
mauu tanya kalo perulangan untuk sistem pakar bagaimana ya, yang Learning vector
Wah, maaf gan.. saya belum bisa bantu, karena pertanyaannya terlalu spesifik dan saya juga kurang paham tentang learning vector. Mudah2an rekan-rekan yang lain bisa membantu.
Terima kasih artikelnya bermanfaat sekali :)
Terimakasih juga kunjungannya gan.. :)
Kalau dari chechkbox kykmana om untuk menggunakan perulanganya ??
belum mudeng :(
makasi banyak gan ane sangat terbantu, dimohon diperbanyak contoh2nya gan dan materinya seperti ajax,jquery,bootstrap . thx
Ditunggu saja updatenya y gan.. :)
Mau nanya ni mas , kalau seumpama isi dari $nama = … itu diisi dengan kode php juga bisa ga,
misalnya $nama = begitulah kira2.Kalau bisa caranya bagaimana? ,Terima kasih
Dicoba aja bang bahrul, $nama = $_POST['nama'];
thanks sangat bermanfaat
Terimakasih gan :)
Om, berarti untuk foreach akan mengulang sebanyak data yang ada ya.. atau tidak bisa dibatasi gitu maksudnya..
Iya gan. foreach adalah perulangan khusus untuk array,
kalau ingin dibatasi jumlah perulangannya bisa disisipkan kondisi IF untuk menentukan kapan harus berhenti,
atau bisa juga menggunakan perulangan 'biasa' seperti for atau while
nanya lg ni pak.. :) sy pny data json, singkatnya sy akses spt ini :
setelah googling bisa warning nya dihilangkan dengan 'foreach ((array)$hasil as $rs)', tp data saya tetap g muncul, dan setelah googling lagi ternyata salah satu penyebabnya bisa dikarenakan data null, nah data saya memang ada colomn yg isinya null… gimana solusinya agar data null, tetap sbg array dan bisa ditampilin melalui foreach….. sory kepanjangan, terima kasih banyak….
Setelah saya coba cari, letak pemasalahannya ada di fungsi json_decode(). Fungsi ini akan mengembalikan nilai NULL jika terdapat key null pada object json-nya:
Sehingga pada foreach loop akan keluar error Invalid argument supplied for foreach(), karena yang mau di loop adalah NULL, bukan array.
Tetapi nilai NULL diperbolehkan dalam object json sepanjang bukan pada key-nya:
Solusi paling baik memang mengubah output json sebelum dibaca oleh fungsi file_get_contents. Namun jika hal ini tidak bisa dilakukan, kita terpaksa harus men-'filter' object json untuk menghapus key NULL. Sebagai contoh, dibawah ini saya menggunakan fungsi pencarian regular expression untuk mencari key NULL dan menghapusnya:
Setelah tidak ada masalah dengan json, selanjutnya kita bisa menampilkan data array dengan foreach loop.
Semoga bisa membantu :)
ok mas. terimakasih telah share ilmu. salam
Gan kok wewnya gak sempurna ya klo dibuka pke opera mini? Kodingnya kebaca
Bisa ditampilkan print screennya gan? Saya coba akses dari browser android masih bisa tampil.
Kodingnya memang akan tampil memanjang di web browser smartphone (harus di geser2),
karena akan susah dipahami kalau kode program juga ikut pindah2 ke baris baru (responsive)
Bagus gan, lengkap nih tentang foreach. Baca juga perintah foreach di blogku Perintah Foreach Untuk Perulangan Array di PHP | Sinau Coding
mau tanya yang input array dengan php mas..??
akhirnya saya tau setelah membaca tutor ini…
Ditunggu ebook php nya
Terimakasih untuk dukungannya gan.. mudah2an saya bisa cepat menyelesaikan eBook PHP :)
Sy suka blog ini krn admin sngat proaktif menanggapi setiap pertanyaan yg disampaikan trkait msalah yg dibahas.trims..
Terimakasih mas,.. Saat ini saya memang fulltime mengelola duniailkom. Sedapat mungkin setiap pertanyaan bisa dibalas… kecuali jika saya sendiri udah g tau gimana jawabnya hehe….
mas mau nanyak,,
saya bikin insert data checbox dengan array alhmdlh lancar tetapi ketika sy bikin updatenya kena data yang didatabase tidak berubah sama sekali padahal tidak ada notifikasi error?
ini sy paste di pastebin,,
makasih sebelumnya,, salam super duniailkom (Y)
mas mau nanyak,,
saya bikin insert data checbox dengan array alhmdlh lancar tetapi ketika sy bikin updatenya kena data yang didatabase tidak berubah sama sekali padahal tidak ada notifikasi error?
ini sy paste di pastebin,,
makasih sebelumnya,, salam super duniailkom (Y)
pastebin.com/g91XMCJ0
Mas, error :
PHP Warning: Invalid argument supplied for foreach() … eval()'d
Code :
<?php
$url = "http://www2.e-solat.gov.my/xml/today/?zon=jhr02";
if (($xml = @simplexml_load_file($url)) === FALSE) {
echo "Error loading XML\n";
die;
}
$data = json_decode(json_encode((array) $xml->channel), 1);
?>
<style type="text/css">
thead th {
background-color: #000;
font : normal 14px/150% Arial;
}
td {
padding: 3px;
font : normal 14px/150% Arial;
}
td.title {
width: 70px;
}
td.desc {
width: 50px;
text-align: center;
}
tr:nth-child(odd) {
background:#06205c;
color: white;
}
tr:nth-child(even) {
color:black;
}
tr:hover {
font-color: black;
background-color: #d61919;
}
</style>
<table width="100%" align="center" border="0">
<tr><td class="desc" align="center"><b><?php echo $data['description']; ?></b>
<br />
<b><?php
$timezone = '+8:00';
$timezone = preg_replace('/[^0-9]/', '', $timezone) * 36;
date_default_timezone_set('Asia/Kuala_Lumpur');
echo date('D d M Y H:i A');
?></b>
</td></tr>
</table>
<table width="100%" align="center" border="0">
<tbody>
<?php foreach ($data['item'] as $key => $value) : ?>
<tr>
<td class="title"><b><?php echo $value['title']; ?></b></td>
<td class="desc"><?php echo date('g:i', strtotime($value['description'])); ?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
—————————–
adakah error pada $data = json_decode(json_encode((array) $xml->channel), 1); ?
Bisa jadi mas, soalnya variabel $data lah yang akan diinput kedalam perulangan foreach (yang menghasilkan error). Jadi harus diperiksa lagi apakah hasil dari json-nya sudah sesuai dengan format atau belum.
Kak, misalkan kita ingin agar di browser ditampilkan sampai di nama Rina;
jika penulisan kodenya seperti di bawah ini, memang akan ditampilkan sampai nama Rina.
yang mau saya tanyakan,
bagaimana penulisan kodenya, jika seandainya kita tidak tahu nama Rina ada di array keberapa dan tidak tahu kalau nama Rina terletak sebelum nama Sari (contoh: daftar 25 nama mahasiswa, asumsi tidak ada nama yang sama)?
*mungkin lebih seperti search
<?php
$nama = array("Andri","Joko","Sukma","Rina","Sari");
foreach ($nama as $val)
{
if ($val=="Sari")
{
break;
}
echo "$val";
echo "<br />";
}
?>
Sekarang tujuan kode programnya untuk apa gan? kalau untuk pencarian di dalam array, PHP menyediakan fungsi array_search() dan in_array(). Penjelasannya belum sempat saya buat, tapi bisa baca di http://php.net/manual/en/function.array-search.php dan http://php.net/manual/en/function.in-array.php
gan kok foreach nya saya kasih akhiran ; data yang keluar cuma satu, akan tetapi apabila tdk memakai akhiran ; data muncul semua…. itu kenapa ya gan
Dalam semua bahasa pemrograman komputer, setiap tanda memiliki makna gan, baik itu titik, titik koma, atau koma, jika tidak ditulis akan menjadi masalah. Jadi penggunaannya harus sesuai seperti yang dijelaskan disini gan..
wah keren nih Duniailkom :D
Jelas sekali penjelasannya.
Adminnya juga ramah..
Makasih sob (y) ^_^
Sama2 gan, semoga bermanfaat :)
Mas kalau misalnya nanti outputnya hanya
Urutan ke-12 adalah Sukma, gimana ya? tapi deklarasi awalnya yang pakai foreach itu..
Jadi gini
<?php
$nama = array(
1=>"Andri",
6=>"Joko",
12=>"Sukma",
45=>"Rina",
55=>"Sari");
foreach ($nama as $kunci =>$isi)
{
echo "Urutan ke-$kunci adalah $isi";
echo "<br />";
}
//output yang di harapkan cuma..
Urutan ke-12 adalah Sukma
?>
Untuk hasil seperti itu kita harus membuat kondisi kapan "Sukma" itu ada gan, misalnya bisa pakai kondisi IF, seperti berikut:
<?php
$nama = array(
1=>"Andri",
6=>"Joko",
12=>"Sukma",
45=>"Rina",
55=>"Sari");
foreach ($nama as $kunci =>$isi) {
if ($kunci == 12) {
echo "Urutan ke-$kunci adalah $isi";
}
}
?>
Gan saya saya mau menghitung jumlah count di variable tersebut
$arr = array($musik1,$musik2,$musik3);
foreach(array_count_values($arr) as $k => $v){
if($v > 0){
echo "Musik<b>".$k."</b> ada ".$v." buah di dalam array<br />";
}
}
Bisa gk sih mas, kalau misalnya saya memasukan hasil array tersebut kedalam variable lagi. Soalnya saya ingin memisahkan hasil countnya kemduian di hitung.
Misalnya output dari kodingan di atas adalah
Musik Pop bernilai 1
Musik Rock bernilai 2
Saya mau membuat variable $pop dan $rock dari datas di atas. Maaf mas kalau ribet. hehehe
Itu isi variabel $musik1, $musik2 dan $musik3 berisi apa ya? apakah array juga? berarti $arr jadi array 2 dimensi y?
Tp terlepas dari itu, untuk menyimpan variabel dari dalam loopnya, bisa kok. misalnya:
foreach(array_count_values($arr) as $k => $v){
if($v > 0){
echo "Musik<b>".$k."</b> ada ".$v." buah di dalam array<br />";
$arr_k[]=$k;
$arr_v[]=$v;
}
}
Jadi setiap nilai $k dan $v akan disimpan di dalam array, nanti tinggal akses aja dengan $arr_k[0], $arr_k[1], dst.
maaf pak mau tanya.. kalo isi array nya kita ambil dari $_POST bagaimana ya? misalkan kita buat form dengan input checkbox. terus pilihan checkbox tsb dijadikan isi array. itu bgm pak?
kak mau tanya… misal menggunakan foreach… untuk menampilkan array 1-5 saja….dari array keseluruhan 1-10…. gimana kak ?
Nanti bisa dibuat sebuah kondisi IF, dan gunakan sebuah variabel counter untuk menghitung sudah perulangan ke berapa. Jika sudah diatas perulangan ke 5, tambahkan perintah break. Contohnya bisa kesini: https://www.duniailkom.com/tutorial-belajar-php-fungsi-dan-cara-penulisan-perintah-break-dalam-perulangan-php/
Terimakasih mas, penjelasannya sangat jelas dan singkat. dan sekarang saya sudah memahami fungsi foreach <?php…..
Siip mas, semoga bermanfaat…
Maaf mas boleh bertanya apakah foreach bisa digunakan seperti for bersarang ? Kalau bisa, bentuk algoritmanya seperti apa mas ? Terimakasih mas.
Yup bisa, tapi hanya untuk array 2 dimensi. Silahkan buat array 2 dimensi, lalu coba di foreach, nanti akan dapat gambarannya seperti apa..
definisi froeach itu apa gan?
foreach kalau di lopp element array kok bisa mengambil element array semua
gimana konsepnya froeach gan?
Hehe.. kalau prinsip kerjanya saya juga kurang paham gan, yang jelas perulangan foreach tersedia di PHP dan cara penggunaannya ya seperti yang dijelaskan artikel ini.
Setiap bahasa pemrograman punya fitur masing-masing. Walaupun bernama sama, cara penggunaannya bisa berbeda. Contohnya di JavaScript ada perulangan for of dan for in, kurang lebih mirip seperti foreach di PHP.
thanks buat artikel nya gan
Sangat bermanfaat, terima kasih
foreach($wallpaper->Results as $item) ini salahnya di mna ya gan..
kok kaya gini terus Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\
//////////
$wallpaper = $wallpaper->SearchResponse->Image;
$posttitle = $wallpaper->Results;
$posttitle = $posttitle[0];
$posttitle = $posttitle->Title;
$content = '';
foreach($wallpaper->Results as $item)
{
$title = $item->Title ;
$url = $item->MediaUrl;
$content .= "<img src='$url' />" . "<br />";
$content .= $title . "<br />";
$content .= $item->Width ." x ". $item->Height . " px";
}
Bisa di cek dulu apakah "$wallpaper->Result" ini memang berisi data yang valid, bisa jadi isinya malah kosong atau tidak sesuai.
mas saya mempunyai persoalan serupa seperti bung pras.. gimana solusinya
masalahnya dibagian ini mas….
foreach($wallpaper->Results as $item)
makasih
Agak susah nih, soalnya harus dipelajari dulu gimana struktur object $wallpaper itu sendiri.
KEREN! dan sangat simple dengan nada yang mudah di pahami, padahal saya sudah cari cari di php.net dan stackoverflow dan lain-lainya tentang foreach loop di php, tapi masih ga paham paham, tapi di sini langsung faham, makasih gan^^
makasih banyak pokoknya
Sama2, semoga bisa bermanfaat…
mas andre mau tanya saya menemukan perintah $stmt -> nah fungsi -> itu apa ya mas.. dan itu masuknya di materi bab apa? terimakasih
Tanda itu dipakai untuk mengakses sebuah method dari object di dalam PHP. PDO sudah menerapkan konsep pemrograman berbasis object, jadi sebelum ke PDO bisa pelajari dulu pemrograman object di PHP. Untuk tutorialnya bisa kesini: https://www.duniailkom.com/tutorial-belajar-oop-php-pemrograman-berbasis-objek-php/
makasih mas andre, ane jd paham fungsi nya sekarang..
Terimakasih atas pencerahan nya mas
jadi saya membuat data vacancy, terus datanya saya kasih perulangan foreach di laravel terus data vacancynya gak muncul lagi, gimana ya gan:(
Belum bisa saya simpulkan nih, soalnya harus lihat kode programnya dulu. Dan karena ini sudah pakai laravel, perlu waktu analisis yang lumayan lama (karena harus dipelajari lagi semua alur kode program yang ada).
hallo mas mau mintol nih, untuk mengubah script berikut ke dalam bentuk foreach gmn ?
trmksh sblmnya
<?php
$no = 1;
$sql = $koneksi -> query("select*from siswa");
while ($data=$sql->fetch_assoc()){
?>
<tr>
<td><?php echo $no++; ?></td>
<td><input class="form-control" name="nm_siswa" readonly value="<?php echo $data['nm_siswa'];?>"/></td>
<td><input class="form-control" name="kls_siswa" readonly value="<?php echo $data['kls_siswa'];?>"/></td>
<td> <center> <select class="form-control" name="ket">
<option></option>
<option value="sakit">Sakit</option>
<option value="izin">Izin</option>
<option value="alpa">Alpa</option>
</select>
</center></td>
</tr>
<?php } ?>
Jika ingin pakai foreach, hasil dari database itu ditampung dulu ke dalam array. Atau pakai fungsi mysqli_fetch_all($result,MYSQLI_ASSOC) agar hasil dari database langsung berbentuk array. Kemudian bari di foreach satu2.
gimana caranya foreach 3 dimensi ya mas?
Cara menuliskan echo untuk foreach agar tercetak
1. …….
2. ……., dan
3. ……..
Gimana caranya master
kayaknya ini salah
<?php
$nama = array("Andri","Joko","Sukma","Rina","Sari");
foreach ($nama as $val)
{
echo "$value";
echo "<br />";
}
?>
karena valuenya tidak sama antara $value dan $val
kalau beda, akan kelaur eror
Notice: Undefined variable: value in C:\xampp\htdocs\KelasPHP\for-each.php
Oh iya, terimakasih koreksinya… seharusnya disitu ditulis echo "$val". Sudah saya perbaiki.
gan gua mau nanya, gua buat tabel potongan_gaji,terdiri dari id,potongan dan jml_potongan ,nah gua mau implemetasikan foreach pada variabel $potongan kira2 seperti ini:
<?php foreach ($potongan as $p )
{
$alpha =$p->jml_potongan;
}
?>
<?php $no=1; foreach($gaji as $g) :?>
<?php $potongan = $g->alpha * $alpha ?>
<tr>
<td><?php echo $no++ ?></td>
<td><?php echo $g->nik ?></td>
<td><?php echo $g->nama_pegawai ?></td>
<td><?php echo $g->jenis_kelamin ?></td>
<td><?php echo $g->nama_jabatan ?></td>
<td> Rp.<?php echo number_format($g->gaji_pokok,0,',',',')?></td>
<td> Rp.<?php echo number_format($g->tj_transport,0,',',',')?></td>
<td> Rp.<?php echo number_format($g->uang_makan,0,',',',')?></td>
<td> Rp.<?php echo number_format($potongan,0,',',',')?></td>
<td> Rp.<?php echo number_format($g->gaji_pokok + $g->tj_transport + $g->uang_makan – $potongan,0,',',',')?></td>
</tr>
<?php endforeach ;?>
</table>
nah yg gua mau nanya disitu kan gua hanya bisa 1 jenis potongan saja yaitu alpha,nah supaya foreach nya itu multifungsi untuk jenis yg lain gimana ya ,seperti izin dan sakit?dan untuk penjumlahan potongan kira2 gimana ya? maklum gan masih belajar
Gan mau tanya, saya punya problem soal foreach, ceritanya saya mau menamplikan hasil query db tetapi setelah saya teliti hasil yang keluar terdapat duplikat (data yg terakhir dieksekusi tertimpa oleh data no 2 terakhir) jadi data yang terkhir tidak muncul, adakah solusinya?
Bisa coba tes dengan data dari tabel lain. Jika masih tertimpa, berarti kode PHPnya yang harus diperbaiki. Tapi jika datanya tidak tertimpa lagi, berarti query MySQLnya yang harus dimodif ulang.
foreach ($this->data as $key => $val) {
foreach ($val as $k => $v) {
$this->normal[$key][$k] = $v / $this->x_jarak[$k];
Mau nanya kak, itu foreachnya kenapa harus dua kali dituliskan tidak bisa 1 yah?
Berarti data yang ingin ditampilkan disimpan dalam bentuk nested array / array 2 dimensi, sehingga perlu 2x foreach.
nama)?>
coding diatas error begini
A PHP Error was encountered
Severity: Warning
Message: Attempt to read property "nama" on null
Filename: angsuran/detail_angsuran.php
Line Number: 64
solusinya gimana kak ?