Sebelumnya telah kita bahas secara penulisan umum if else pada PHP: Memahami If Else Dalam PHP (dan Elseif), selain cara tersebut, terdapat satu lagi cara penulisan if else pada PHP yaitu menggunakan ternary operators (?:) atau istilah lainnya shorthand if/else.
I. Aturan Penulisan Ternary Operator (?:)
Format umum penulisan ternary operator adalah:
$var = ekspresi1 ? ekspresi2 : ekspresi3
jika ekspresi1
bernilai TRUE maka nilai yang dihasilkan adalah ekspresi2
, sebaliknya jika ekspresi1
bernilai FALSE, maka nilai yang dihasilkan adalah ekspresi3
. ekspresi1
, ekspresi2
dan ekspresi3
bisa berisi apa saja, termasuk fungsi.
Jika dituliskan dengan format if else secara umum, maka bentuknya sama seperti ini:
if ( ekspresi1 ) {
$var = ekspresi2
} else {
$var = ekspresi3
}
Berikut ini contoh penggunaan ternary operator:
$nilai = 9;
echo $nilai > 8 ? 'Sangat Baik' : 'Baik'; // Sangat Baik
Contoh tersebut diatas jika ditulis dalam struktur if else biasa akan seperti ini:
$nilai = 9;
if ($nilai > 8) {
echo 'Sangat Baik';
} else {
echo 'Baik';
}
Dari contoh diatas terlihat bahwa penulisan menggunakan ternary operator jauh lebih ringkas.
II. Cara Lain Penulisan Ternary Operator
Sejak PHP 5.3, penulisan ternary operator bisa dipersingkat lagi, ekspresi2
bisa untuk tidak dituliskan, sehingga bentuk penulisannya menjadi:
$var = ekspresi1 ?: ekspresi3
pada contoh diatas, jika expresi1
bernilai TRUE makan nilai yang dihasilkan adalah ekspresi1
, sebaliknya jika FALSE, maka nilai yang dihasilkan adalah ekspresi3
. Jika ditulis dalam if else bentuk umum, bentuknya menjadi:
if ( ekspresi1 )
{
$var = ekspresi1;
} else {
$var = ekspresi3;
}
Berikut contoh penulisan lain ternary operator:
$nilai = '';
echo $nilai ?: 9; // 9
III. Penggabungan dengan string
Jika ternary operator digabungkan dengan string, maka harus menggunakan tanda kurung, sehingga PHP akan membacanya sebagai statement tersendiri, jika tidak, maka akan menghasilkan pesan error. contoh:
//ERROR: Parse error: parse error, unexpected ':'
$option ='<option value="1" '.$status == "1" ? 'selected="selected"' :''.'>Januari</option>';
//Benar:
$option ='<option value="1" '.($status == "1" ? 'selected="selected"' :'').'>Januari</option>';
Error ini disebabkan karena PHP membaca karakter setelah dot (.) sebagai string, karena memang dot digunakan sebagai penghubung string, dengan memberikan tanda kurung, maka tanda kurung tersebut akan dieksekusi terlebih dahulu (dan menghasilkan string) sebelum tanda dot dieksekusi.
IV. Nested If Else
Cara Penulisan If Else Pada PHP dengan menggunakan ternary operator dapat ditulis dengan level kedalaman yang tidak terbatas, if else
di dalam if else
(nested if else
), adapun format penulisannya adalah:
ekspresi1 ? ekspresi2 : (ekspresi3 ? ekspresi4 : (dst..))
contoh penggunaannya:
$nilai = 6;
$predikat = $nilai > 8 ? 'Sangat Baik' : ( $nilai >= 7 && $nilai <= 8 ? 'Baik' : ($nilai <= 6 && $nilai > 5 ? 'Sedang' : 'Kurang') );
echo $predikat; // Sedang
?>
Kode diatas akan sedikit membingungkan dan lebih sulit diperbaiki jika terjadi kesalahan, karena terdapat tiga if else
dalam satu baris kode, idealnya MAKSIMAL dua, menurut saya, jika lebih dari dua lebih baik ditulis menggunakan format seperti biasanya, namun jika ingin tetap menggunakannya gunakan format yang mudah dibaca, sehingga kode diatas dapat ditulis ulang menjadi:
$predikat = $nilai > 8
? 'Sangat Baik'
: ( $nilai >= 7 && $nilai <= 8
? 'Baik'
: ( $nilai <= 6 && $nilai > 5
? 'Sedang'
: 'Kurang'
)
);
echo $predikat; // Sedang
Jika dibuat dalam bentuk if else biasa, maka bentuknya menjadi:
if ( $nilai > 8 ) {
$predikat = 'Sangat Baik';
} else if ( $nilai >= 7 && $nilai <= 8 ) {
$predikat = 'Baik';
} else if ( $nilai <= 6 && $nilai > 5 ) {
$predikat = 'Sedang';
} else {
$predikat = 'Kurang';
}
IV. Keuntungan Menggunakan Ternary Operator (?:)
Beberapa keuntungan penulisan if else pada PHP dengan ternary operator adalah:
- Penulisan
if else
menjadi lebih cepat dan singkat karena tidak perlu menuliskan keyword if dan else; - Kode menjadi lebih mudah dibaca, terutama ketika kode yang kita tulis inline (satu baris), selain itu lebih mudah digabungkan dengan string, dll
- Perbaikan kode menjadi lebih mudah.
V. Tips Menggunakan Ternary Operator (?:)
Berikut ini beberapa tips penggunaan ternary operator:
- Seperti pada contoh sebelumnya, untuk kode yang cukup panjang, jika memungkinkan buat beberapa baris kode, agar lebih mudah dibaca dan diperbaiki.
- Gunakan tanda kurung yang cukup namun tidak berlebihan agar kode lebih terorganisir.
- Jika belum terbiasa menggunakan model ternary, tulis kode dalam bentuk standar kemudian terjemahkan ke dalam bentuk ternary operator.
VI. Contoh Penggunaan Ternary Operator (?:)
<?='Selamat Datang ' . ($this->isLogIn ? $this->_nama : 'Tamu, Silakan Login')?>
<?='Selamat Datang ' . ($this->_nama ?: 'Tamu, Silakan Login')?>
$bulan = array('1'=>'Januari',
'Februari',
'Maret' ,
'April' ,
'Mei',
'Juni',
'Juli',
'Agustus',
'September',
'Oktober',
'November',
'Desember'
);
$nilai = array(1 => 9, 7, 8, 9, 7, 10, 7, 9, 8, 8, 9, 8);
foreach ($bulan as $bln => $nama_bln)
{
// Ternary Operators
$triwulan = $bln >= 1 && $bln <= 3
? 1
: ($bln >= 4 && $bln <= 6
? 2
: ($bln >= 7 && $bln <= 9 ? 3 : 4)
);
$semester = $bln >= 1 && $bln <= 6 ? 1 : 2;
$result['triwulan'][$triwulan][$nama_bln] = $nilai[$bln];
$result['semester'][$semester][$nama_bln] = $nilai[$bln];
}
/*
Hasil:
Array
(
[triwulan] => Array
(
[1] => Array
(
[Januari] => 9
[Februari] => 7
[Maret] => 8
)
[2] => Array
(
[April] => 9
[Mei] => 7
[Juni] => 10
)
[3] => Array
(
[Juli] => 7
[Agustus] => 9
[September] => 8
)
[4] => Array
(
[Oktober] => 8
[November] => 9
[Desember] => 8
)
)
[semester] => Array
(
[1] => Array
(
[Januari] => 9
[Februari] => 7
[Maret] => 8
[April] => 9
[Mei] => 7
[Juni] => 10
)
[2] => Array
(
[Juli] => 7
[Agustus] => 9
[September] => 8
[Oktober] => 8
[November] => 9
[Desember] => 8
)
)
)*/
Demikian pembahasan mengenai cara penulisan If Else pada PHP dengan ternary operator (?:), semoga bermanfaat.
Subscibe Now
Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com
23 Feedback dari pembaca
mas ,tolong dong ,mngkin ini bukan tmpt yang pas untuk pembahasan tutorial di atas,
aku mau buat falidasi,untuk pengecekan data yang sama,kok malah ketika aku input data yang sma malah tidak keluar peringatan bahwa data uda ada yang sama,tolong dong pencerahan nya
iya mas, pesan errornya seperti apa ya mas? bisa lihat contoh script nya?
mas, apakah ternary operator bisa digunakan untuk kasus seperti ini ?
kalau bisa bagaimana cara penulsainnya?
Coba pakai
xor
massaya punya query seperti ini
$sql = “SELECT nasabah.noid as noid,
nasabah.nama as nama,
nasabah.tanggal as tanggal,
nasabah.id_wdh as id_wdh,
majelis.n_maj as n_maj,
sub.n_sub as n_sub,
((SELECT SUM(kredit)FROM shu_pw WHERE noid=nasabah.noid)-(SELECT SUM(debet) FROM shu_pw where noid=nasabah.noid))as shu ,
((SELECT sum(kredit) FROM simpanan WHERE noid=nasabah.noid and simpanan.tgl <='$sampai') – (SELECT sum(debet) FROM simpanan WHERE noid=nasabah.noid and simpanan.tgl <= '$sampai')) as total
FROM nasabah
inner join majelis using (id_maj)
inner join sub using (id_sub)
ORDER BY nasabah.noid";
Hasilnya Saldo =Rp.177.715.000,00
dan query seperti ini
$simpanan=mysql_query("SELECT noid,id_jenis,tgl,sum(debet) as debet,
SUM(kredit) as kredit,(sum(kredit)-sum(debet)) as hasil from simpanan
where tgl <'$daria' and tgl <'$kea'");
$simpanan1=mysql_fetch_array($simpanan);
hasil nya saldo =Rp.177.815.000,00
Jadi ada selisih Rp.100.000 dan tentunya yang benar adalah yang pertama dan yg kedua kelebihan Rp.100.000 jadi Mas Agus kelirunya dimana yaa…?Trimaksih
Saya kesulitan jika tidak ada contoh data tabelnya mas
Mas agus, punten mas
kalo begini gimana ya mas
Sudah pas seperti itu mas, atau bisa dirapikan:
$jumlah = $_POST[“jumlah”];
$target = $_POST[“target”];
$max = $_POST[“max”];
$min = $_POST[“min”];
$query = ”;
if ( $jumlah >= $target){
$hasil_harian = $_POST[‘$jumlah*$max’];
}
else {
$hasil_harian = $_POST[‘$jumlah*$min’];
}
salam mas agus, saya punya koding seperti di atas, tp waktu di insert ke database ko malah error ya?
Error nya seperti apa mas? Sama query nya seperti apa mas…?
$hasil_harian = $_POST[‘$jumlah*$max’];
koding diatas tidak terbaca mas, kalo query nya query insert biasa mas, tapi untuk “hasil_harian” menggunakan kondisi if else di atas mas
Ciba di print post nya mas, datanya ada tidak? print_r($_POST)
Beri keterangan apakah seseorang memiliki potensi menderita sakit jantung atau tidak jika diketahui bahwa potensi sakit jantung dapat diketahui berdasarkan lingkar perut seseorang dan jenis kelaminnya. Jika pria dengan lingkar perut lebih besar dari 90 CM maka dia berpotensi sakit jantung sedangkan untuk wanita lingkar perut lebih besar dari 80 CM.
Ini codingnya bagaimana mas
Coba di urutkan logikanya terus di terjemahkan ke statement IF, misal: if ($jenis_kelamin == ‘L’ && $lingkar_perut > 80) {$potensi = ‘Ada’}…
bukan nya 9 > 8 itu true ya? jadi hasil harus nya ‘sangat baik’
Betul mas…
mas mau tanya, kalau saya menyimpan data kosong kenapa outputnya jadi nol ya?
$valu = “”;
$stat = “”;
$idx_elemen = $g[‘id’];
$t = $p[‘tahun’];
$idx_tahun = $t;
if (!empty($tampung_data_detil[$idx_elemen][$idx_tahun][‘val’])) {
$valu = $tampung_data_detil[$idx_elemen][$idx_tahun][‘val’];
}
if (!empty($tampung_data_detil[$idx_elemen][$idx_tahun][‘status’])) {
$stat = $tampung_data_detil[$idx_elemen][$idx_tahun][‘status’];
}
if (($g[‘kode1’] != “0” && $g[‘kode2’] != “0”) || $g[‘mode_terhadap_child’] == 0) {
$html .= ”;
$html .= ”.form_dropdown(‘data[‘.$g[‘id’].’][‘.$t.’][status]’, array(“1″=>”OK”,”2″=>”Angka Sementara”,”3″=>”Angka Sangat Sementara”), $stat, ‘class=”form-control input-sm”‘).”;
} else {
$html .= ‘ ‘;
}
$html .= ”;
}
Coba cek tipe datanya mas
contoh 1 bukannya hasilnya Sangat Baik ya mas? kan 9 > 8
Oh iya mas benar, terima kasih banyak atas koreksinya, sudah saya perbaiki
echo”
$no
$m[nama_test]
$m[status]
“;
Mas agus tolong d bantu ana pusing haha, itu kode di atas kalo mau ganti $m[status] if else Proses, Selesai dan Batal. gimana ya mas, udah muter2 error terus.
Pertanyaanku kok ilang ya hew 😀
Bisa coba di submit lagi mas