PHPの三項演算子の書き方 [重複]について
2023-09-15 01:26:54
質問内容
PHPの三項演算子でelseifの部分はどのように書けばいいのでしょうか?
を使った基本的な例を見かけますが
if
と
else
の部分は、PHP の三項演算子ではこのようになります。
echo (true) ? "yes" : "no"; //prints yes
echo (false) ? "yes" : "no"; //prints no
このような"elseif"の部分を三項演算子に入れるにはどうしたらいいでしょうか?
<?php
if($result->vocation == 1){
echo "Sorcerer";
}else if($result->vocation == 2){
echo 'Druid';
}else if($result->vocation == 3){
echo 'Paladin';
}else if($result->vocation == 4){
echo 'Knight';
}else if($result->vocation == 5){
echo 'Master Sorcerer';
}else if($result->vocation == 6){
echo 'Elder Druid';
}else if($result->vocation == 7){
echo 'Royal Paladin';
}else{
echo 'Elite Knight';
}
?>
どのように解決するのですか?
三項演算子は、あなたが望むものに対して良い解決策ではありません。 それはあなたのコードで読むことができませんし、利用可能なはるかに良いソリューションがあります。
配列のルックアップ "map" または "dictionary" をこのように使ってはどうでしょうか。
$vocations = array(
1 => "Sorcerer",
2 => "Druid",
3 => "Paladin",
...
);
echo $vocations[$result->vocation];
このアプリケーションのための三項対立は、結局のところ次のようになります。
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
なぜこれが悪いのでしょうか?なぜなら - 1つの長い行として、ここで何か問題が発生しても有効なデバッグ情報を得ることができず、長さによって読みづらくなり、さらに複数の3項が入れ子になっているのは奇妙に感じられるからです。
標準的な三項演算子 はシンプルで読みやすく、次のようになります。
$value = ($condition) ? 'Truthy Value' : 'Falsey Value';
または
echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';
三項演算子は、単純な
if else
ステートメントを書くための便利で短い方法です。 上のサンプルの三項と同じです。
if ($some_condition) {
echo 'The condition is true!';
} else {
echo 'The condition is false!';
}
しかし、複雑なロジックのための三項対立はすぐに読めなくなり、もはや簡潔さに見合うものではありません。
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
複数行にまたがるような丁寧な書式設定をしても、あまりわかりやすいとは言えませんね。
echo($result->group_id == 1
? "Player"
: ($result->group_id == 2
? "Gamemaster"
: ($result->group_id == 3
? "God"
: "unknown")));
関連
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み] PHPの三項演算子とNULL合体演算子の比較
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み】mysqli::query(): mysqli をフェッチできない
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。