Cara menggunakan perulangan ganti baris php

Permisi, saya masi nubi, mau tanya gimana caranya buat looping per kolom, jdi sudah di tentukan kalau barisnya = 8 disini variabelnya jumlah_x, kolomnya dinamis (untuk sementara ini saya buat dg nama variabel hidden = 3), Pada code yg sudah saya kerjakan, outputnya kebawah terus gk mau ke samping setelah 8 baris, pengennya setelah 8baris pindah ke kolom ke 2,3,dst. Terimakasih Alur looping yg saya mau

Cara menggunakan perulangan ganti baris php
Code yg saya buat

@Laillyqolby

3 Kontribusi 1 Poin

Dipost: 6 tahun yang lalu Update 2 tahun yang lalu


Jawaban

coba script spt ini:

<?php
$bobotxz=array(-0.5,-0.4,-0.3,-0.2,-0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5);

$hidden=3;
$jumlah_x=8;
echo "<table border=1>";
for ($j=1; $j<=$jumlah_x; $j++) {
   echo "<tr>";
   for ($i=1; $i<=$hidden; $i++) {      
      echo "<td>";
      echo "&nbsp".$bobotxz[array_rand($bobotxz)]."&nbsp";
      echo "</td>";      	
   }
   echo "</tr>";
}
echo "</table>";
?>


Terima kasi jawabannya, tapi kalau loopingnya gitu dia cetak di baris 1 kolom 1,baris 1 kolom 2,baris 1 kolom 3 baru cetak ke baris 2 kolom 1,dst. Nah, yg saya maksud itu hasilnya dari baris 1 kolom 1, baris 2 kolom 1,baris 3 kolom 1 sampai kondisi barisnya terpenuhi baru pindah ke baris 1 kolom 2


<?php
$bobotxz=array(-0.5,-0.4,-0.3,-0.2,-0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5);

$hidden=3;
$jumlah_x=8;
echo "<table border=1>";
for ($j=1; $j<=$jumlah_x; $j++) {
   echo "<tr>";
   for ($i=1; $i<=$hidden; $i++) {      
      echo "<td>";
      //echo "&nbsp".$bobotxz[array_rand($bobotxz)]."&nbsp";
      echo "$j,$i";
      echo "</td>";      	
   }
   echo "</tr>";
}
echo "</table>";
?>

klo di test hasilnya kaya gini, bukan?

@rajamobilbekas

4 Kontribusi 3 Poin

Dipost: 6 tahun yang lalu Update 6 tahun yang lalu


yang tampil tetap bilangan random bobot xz, cuman loopingnya aja dari kolom 1 baris 1- 8, kemudian pindah ke kolom 2 baris 1-8. kurang lebih outputnya pengen kaya gini

Cara menggunakan perulangan ganti baris php


agan @Laillyqolby apakah sudah mendapat jawaban yang sesuai...
boleh di share donk... ane minta codenya.

thanks...

  • <?php $tes = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n'); $a = array(); $r = 0; foreach($tes as $k => $v){ if ($k % 3 == 0){ $r = $k; $a[$k][] = $v; continue; }; if ($k % 3 != 0){ $a[$r][] = $v; } } echo '<table border="1">'; foreach($a as $k => $v){ echo '<tr>'; foreach($v as $key => $val){ echo '<td>'.$val.'</td>'; } echo '</tr>'; } echo '</table>'; ?> - @danimarido
  • ini gan, bisa di coba - @danimarido


Login untuk gabung berdiskusi

Hi.. pada kesempatan kali ini kita akan membahas salah satu bentuk perulangan yang populer dan sering digunakan (termasuk saya sendiri)  yaitu perulangan for pada PHP.

PHP sendiri menyediakan beberapa fungsi loop, yaitu while, do/while, dan for. Perbedaan antara while, do/while, dan for yaitu untuk for, sudah diketahui banyaknya pengulangan, sedangkan while dan do/while belum diketahui berapa banyaknya pengulangan.

I. Penulisan For Pada PHP

Perulangan for pada PHP dapat ditulis menggunakan kurung kurawa, colon, atau tanpa keduanya:

// Kurung Kurawa, paling umum digunakan
for (ekspresi1; ekspresi2 ; ekspresi3) { 
	// kode 
}

// Colon
for (ekspresi1; ekspresi2 ; ekspresi3) :
	// kode 
endfor;

// Tanpa Keduanya
for (ekspresi1; ekspresi2 ; ekspresi3)
	statement;

Dalam menjalankan fungsi loop, PHP akan melakukan eksekusi dengan urutan sebagai berikut:

  1. PHP akan membaca ekspresi1
  2. Selanjutnya PHP akan mengevaluasi ekspresi2, jika nilanya TRUE, maka statement di dalam kurung kurawa dijalankan, jika bernilai FALSE maka loop dihentikan.
  3. Setelah itu PHP akan mengevaluasi atau menjalankan ekspresi3

begitu seterusnya hingga loop selesai, jika digambarkan dalam bentuk flowchart:

Cara menggunakan perulangan ganti baris php

Ketentuan mengenai ekspresi

Beberapa ketentuan terkait penulisan ekspresi:

  1. Semua ekspresi dapat bernilai kosong atau dapat bernilai lebih dari satu dengan pemisah tanda koma
  2. Semua ekspresi pada ekspresi2 akan di evaluasi, namun untuk menentukan nilai (TRUE atau FALSE – yang menentukan loop berhenti atau berlanjut), digunakan ekspresi yang terakhir.
  3. Jika ekspresi2 yang bernilai kosong maka loop akan dijalankan terus hingga dihentikan oleh break statemen yang ada di dalam kurung kurawa.

Berikut beberapa contoh penulisan for loop dengan berbagai ekspresi yang semuanya akan mencetak angka 1 s.d 10. (Bentuk 1 merupakan bentuk yang sering (atau selalu) dipakai (termasuk saya))

<?php
/* 
Contoh 1, bentuk lengkap, SERING DAN UMUM DIGUNAKAN
*/

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

/*
Contoh 2, dengan ekspresi2 kosong, kode dihentikan dengan brak statement 
*/

for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}

/* 
Contoh 3, semua ekspresi kosong
*/

$i = 1;
for ( ; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}

/* 
Contoh 4, tanpa statement hanya ekspresi saja
 */

for ($i = 1; $i <= 10; print $i, $i++);
?>

II. Melompati (skip) For Loop Pada Nilai Tertentu

Pada saat menjalankan loop, terkadang pada kondisi/nilai tertentu, kita ingin melompatinya (skip), untuk keperluan tersebut, kita dapat menggunakan statement continue contoh:

<?php
for ($i = 1; $i <= 10; $i++) {
	if ($i == 5) {
		continue;
	}
    echo $i; // 1 2 3 4 6 7 8 9 10
}
?>

III. Tips Optimasi Perulangan For Pada PHP

Berikut ini beberapa tips yang dapat kita terapkan agar perulangan for dapat dieksekusi dengan cepat

1 Hindari pemanggilan fungsi dan pendefinisian variabel yang nilainya tetap di dalam loop

Fungsi ini dapat berupa fungsi bawaan PHP seperti count, substr, strlen, dll maupun fungsi yang kita buat sendiri, contoh berikut pengulangan untuk mendapatkan nama bulan:

<?php
$bulan = array('1'=>'Januari', 
			'Februari', 
			'Maret' , 
			'April' , 
			'Mei', 
			'Juni', 
			'Juli', 
			'Agustus', 
			'September', 
			'Oktober', 
			'November', 
			'Desember'
		);
$batas_waktu = '2015-11-10';
echo '<table>
		<tr>
			<th>Bulan</th>
			<th>Keterangan</th>
		</tr>';
for ($i = 1; $i <= count($bulan); $i++)
{	
	$bln_batas = date("m",strtotime($batas_waktu));
	echo '<tr>
			<td> ' . strtoupper($bulan[$i]) . ' </td>';
		
	if ($bln_batas == $i)
		echo '<td>Batas waktu penulisan</td>';
	else
		echo '<td>-</td>';
		
	echo '</tr>';
}

echo '</table>';
?>

output:

BulanKeterangan
JANUARI
FEBRUARI
MARET
APRIL
MEI
JUNI
JULI
AGUSTUS
SEPTEMBER
OKTOBER
NOVEMBER Batas waktu penulisan
DESEMBER

dari contoh tersebut PHP akan: (1) memanggil fungsi count($bulan), (2) fungsi date("m",strtotime($batas_waktu)) dan (3) mendefinisikan variabel $bln_batas berulang ulang, hal tersebut tidak efisien karena akan memakan waktu dan resource.

Berbeda dengan fungsi strtoupper yang memang diperlukan di dalam loop, karena nilainya berubah ubah sesuai nama bulan. Untuk itu, fungsi dan variabel yang nilainya tetap sebaiknya didefinisikan di luar loop, kode dapat ditulis ulang menjadi:

<?php
$bln_batas = date("m",strtotime($batas_waktu));
$jml_bln   = count($bulan);		
for ($i = 1; $i <= $jml_bln, $i++)
{
	// code
}
?>

atau

<?php
$bln_batas = date("m",strtotime($batas_waktu));
for ($i = 1, $jml_bln = count($bulan); $i <= $jml_bln, $i++)
{
	//code
}
?>

dari contoh diatas, waktu eksekusi lebih cepat karena fungsi count dan date, serta pendefinisian variabel $bln_batas hanya dijalankan sekali. Dalam kode diatas terdapat $i++, kode tersebut merupakan kependekan dari $i = $i + 1.

Praktek di lapangan bisa menjadi lebih kompleks, misal dengan contoh diatas, kita akan menambahkan informasi deadline suatu tahapan, misal output yang diinginkan adalah:

BulanDeadline
TahapanTanggal
JANUARI Perencanaan 2015-01-31
FEBRUARI Analisis 2015-02-28
MARET Perancangan 2015-03-31
APRIL Penerapan 2015-04-30
MEI Evaluasi 2015-05-31
JUNI Penggunaan 2015-06-30
JULI
AGUSTUS
SEPTEMBER
OKTOBER
NOVEMBER
DESEMBER

Kode yang kita gunakan:

<?php
$bulan = array('1'=>'Januari', 
			'Februari', 
			'Maret' , 
			'April' , 
			'Mei', 
			'Juni', 
			'Juli', 
			'Agustus', 
			'September', 
			'Oktober', 
			'November', 
			'Desember'
		);

// Informai yang diperoleh dari database
$tahapan = array(
				array('tahap' => 'Perencanaan',	'tgl' => '2015-01-31'),
				array('tahap' => 'Analisis',	'tgl' => '2015-02-28'),
				array('tahap' => 'Perancangan',	'tgl' => '2015-03-31'),
				array('tahap' => 'Penerapan',	'tgl' => '2015-04-30'),
				array('tahap' => 'Evaluasi',	'tgl' => '2015-05-31'),
				array('tahap' => 'Penggunaan',	'tgl' => '2015-06-30')
			);
echo '<table>
		<tr>
			<th rowspan="2">Bulan</th>
			<th colspan="2">Deadline</th>
		</tr>
		<tr>
			<th>Tahapan</th>
			<th>Tanggal</th>
		</tr>
	
		';

$jml_bln = 
for ($i = 1; $i <= count($bulan); $i++)
{	
	echo '<tr>
			<td> ' . strtoupper($bulan[$i]) . ' </td>';
		
		$data_tahapan = false;
		foreach ($tahapan as $tahap)
		{
			$bln_batas = date("m",strtotime($tahap['tgl']));
			if ($bln_batas == $i) {
				echo '<td>'.$tahap['tahap'].'</td>
					  <td>'.$tahap['tgl'].'</td>';
				$data_tahapan = true;
			}
			
		}
		if (!$data_tahapan)
				echo '<td>-</td>
					 <td>-</td>';
		
	echo '</tr>';
}
echo '</table>';
?>

dari data diatas terdapat pengulangan fungsi date yaitu sebanyak 72 kali (12 x 6), dengan struktur data seperti diatas, agak ribet jika harus memenuhi kondisi ideal seperti contoh sebelumnya.

Kondisi tersebut dapat dipenuhi, namun kode yang ditulis bisa jadi menjadi lebih kompleks dan membutuhkan tenaga yang lebih untuk memahaminya (tergantung kondisi lapangan).

Pada kondisi ini, kondisi ideal dapat dilanggar jika kode yang ditulis menjadi lebih sederhana dan mudah dipahami dan performa aplikasi juga tidak terganggu.

Namun jika tidak ada salahnya kita mencobanya. Dengan sedikit perubahan, kode diatas dapat kita tulis kembali menjadi:

<?php
$bulan = array('1'=>'Januari', 
			'Februari', 
			'Maret' , 
			'April' , 
			'Mei', 
			'Juni', 
			'Juli', 
			'Agustus', 
			'September', 
			'Oktober', 
			'November', 
			'Desember'
		);

// Informai yang diperoleh dari database
$tahapan = array(
				array('tahap' => 'Perencanaan',	'tgl' => '2015-01-31'),
				array('tahap' => 'Analisis',	'tgl' => '2015-02-28'),
				array('tahap' => 'Perancangan',	'tgl' => '2015-03-31'),
				array('tahap' => 'Penerapan',	'tgl' => '2015-04-30'),
				array('tahap' => 'Evaluasi',	'tgl' => '2015-05-31'),
				array('tahap' => 'Penggunaan',	'tgl' => '2015-06-30')
			);

foreach ($tahapan as $key => $tahap)
{
	$bln_batas = date("n",strtotime($tahap['tgl']));
	$ref_tahapan[$bln_batas] = $key;
}
echo '<table>
		<tr>
			<th rowspan="2">Bulan</th>
			<th colspan="2">Deadline</th>
		</tr>
		<tr>
			<th>Tahapan</th>
			<th>Tanggal</th>
		</tr>
	
		';

$jml_bln = count($bulan);
for ($i = 1; $i <= $jml_bln; $i++)
{	
	echo '<tr>
			<td> ' . strtoupper($bulan[$i]) . ' </td>';
		
			if (key_exists($i, $ref_tahapan))
			{
				echo '<td>'.$tahapan[$ref_tahapan[$i]]['tahap'].'</td>
					  <td>'.$tahapan[$ref_tahapan[$i]]['tgl'].'</td>';
			} 
			else
			{				
				echo '<td>-</td>
					 <td>-</td>';
			}
			
	echo '</tr>';
}
echo '</table>';
?>

pada kode diatas line 26 s.d 30 kita membuat variabel baru bernama $ref_tahapan yang berbentuk array dengan key bulan dan value index dari array tahapan, contoh $ref_tahapan[1] = 0 yang berarti bulan 1 merujuk ke $tahapan[0].

Kode diatas tidak terlalu kompleks dan masih wajar untuk digunakan walaupun pengguna kode membuat kita harus menambah tenaga untuk memahami variabel baru $ref_tahapan

Ketika di tes, kode diatas membutuhkan waktu eksekusi 0.0011389255523682 detik sedangkan sebelumnya 0.014470100402832 detik, tidak terasa perbedaannya oleh karena itu kita dapat menggunakan kedua cara diatas, namun jika kode yang ditulis kompleks, cara kedua bisa dipertimbangkan untuk digunakan.

2 Hindari eksekusi perintah SQL di dalam loop

Sebisa mungkin jangan pernah melakukan eksekusi kode SQL di dalam loop, dengan eksekusi yang berulang ulang maka akan memberatkan server database yang pada akhirnya akan menurunkan performa aplikasi anda.

Contoh dibawah ini pengulangan eksekusi MySQL di dalam loop (variabel $bulan menggunakan contoh sebelumnya):

$jml_bln = count($bulan); 
for ($i = 1; $i <= $jml_bln, $i++) { 
	$bln	= substr('0'.$i, -2); 
	$sql 	= 'SELECT jml_byr FROM penjualan WHERE MONTH(tgl_byr) = $bln; 
	$stmt 	= $pdo->prepare($sql); 
	$stmt->execute(); 
	$penjualan[$bln] = $stmt->fetchAll(PDO::FETCH_ASSOC); 
}

Contoh diatas akan mengeksekusi perintah SQL sebanyak 12 kali yang tentu saja akan memberatkan, terlebih lagi jika datanya sangat besar.

Untuk optimasi, salah satunya dapat ditempuh dengan membuat query di dalam loop kemudian mengeksekusinya di luar loop yang tentu saja akan menyebabkan penulisan query yang berbeda, untuk pembahasan lebih detailnya dapat dibaca pada artikel: Query MySQL di Dalam PHP Loop – Bad Practice !!!

3 Berhati – hati dalam penulisan nested loop

Terkadang kita menuliskan banyak loop di dalam loop, untuk kehati-hatian, gunakan variabel yang mencerminkan kondisi yang ada, tidak sekedar $i, mengingat nilai variabel akan berubah jika kita mendefinisikan dengan nama yang sama (baik sengaja maupun tidak), contoh berikut akan menghasilkan

*
**
***
****
*****

<?php
for ($row = 1; $row <= 5; $row++)
{
    for ($col = 1; $col <= $row; $col++)
    {
        echo '*' . '<br/>';
    }
}
?>

Berkreasi dengan loop

Penggunaan loop sangat luas sekali bisa untuk berbagai macam kebutuhan, saya ingin sharing contoh loop yang saya buat beberapa waktu lalu berupa karakter yang membentuk bidang persegi / segitiga yang dapat disusun menjadi suatu motif tertentu, agar artikel tidak terlalu panjang, silakan klik disini untuk membacanya

Demikian tutorial mengenai perulangan for pada PHP, semoga dapat bermanfaat.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Apa itu Perulangan pada PHP?

Perulangan adalah sebuah kondisi dimana satu atau beberapa baris kode program di eksekusi secara berulang-ulang. Loop digunakan untuk mengeksekusi blok kode yang sama berulang kali, blok kode yang sama dijalankan berulang-ulang beberapa kali selama kondisi tertentu benar.

Apa manfaat dari menggunakan perintah perulangan pada PHP?

Loop di PHP berguna ketika Anda ingin mengeksekusi sepotong kode berulang kali hingga suatu kondisi bernilai false. Jadi kode dieksekusi berulang kali selama kondisi bernilai true, dan segera setelah kondisi bernilai false, skrip terus mengeksekusi kode setelah loop.

Apa saja struktur Kontrol Perulangan?

Struktur kontrol pengulangan adalah berupa pernyataan dari Java yang mengijinkan kita untuk mengeksekusi blok kode berulang- ulang sesuai dengan jumlah tertentu yang diinginkan. while, do-while dan for. Setiap kondisi loop merupakan suatu ekspresi boolean yang mengendalikan tubuh loop.

Kapan sebaiknya perintah foreach digunakan?

Foreach di gunakan untuk perulangan yang datanya dalam bentuk array. terkadang kita memiliki data dalam bentuk array yang harus kita tampilkan dengan menggunakan perulangan for.