PHP の switch で case ごとに複数の値を指定するための最良の方法とは?
2023-10-22 21:36:20
質問
このPHPのswitch文はどのように行うのでしょうか?
また、これらははるかに小さいバージョンであり、私が作成する必要がある1は、それに多くの値が追加されることに注意してください。
バージョン1です。
switch ($p) {
case 'home':
case '':
$current_home = 'current';
break;
case 'users.online':
case 'users.location':
case 'users.featured':
case 'users.new':
case 'users.browse':
case 'users.search':
case 'users.staff':
$current_users = 'current';
break;
case 'forum':
$current_forum = 'current';
break;
}
バージョン2です。
switch ($p) {
case 'home':
$current_home = 'current';
break;
case 'users.online' || 'users.location' || 'users.featured' || 'users.browse' || 'users.search' || 'users.staff':
$current_users = 'current';
break;
case 'forum':
$current_forum = 'current';
break;
}
UPDATE - テスト結果
10,000回の繰り返しでスピードテストをしてみました。
Time1: 0.0199389457703 // Ifステートメント
Time2: 0.0389049446106 //Switchステートメント
時間3: 0.106977939606 // 配列
どのように解決するのですか?
未知の文字列があり、その文字列の束の中からどの その他 の文字列のどれと一致するかを知る必要がある場合、項目を増やしても遅くならない唯一の解決策は、配列を使用し、キーとしてすべての可能な文字列を持つことです。つまり、このスイッチは次のように置き換えることができます。
// used for $current_home = 'current';
$group1 = array(
'home' => True,
);
// used for $current_users = 'current';
$group2 = array(
'users.online' => True,
'users.location' => True,
'users.featured' => True,
'users.new' => True,
'users.browse' => True,
'users.search' => True,
'users.staff' => True,
);
// used for $current_forum = 'current';
$group3 = array(
'forum' => True,
);
if(isset($group1[$p]))
$current_home = 'current';
else if(isset($group2[$p]))
$current_users = 'current';
else if(isset($group3[$p]))
$current_forum = 'current';
else
user_error("\$p is invalid", E_USER_ERROR);
のようにきれいには見えません。
switch()
のようにきれいではありませんが、これは唯一の
速い
しかし、整頓するための関数やクラスの小さなライブラリを書く必要がない、唯一の高速なソリューションです。配列に項目を追加するのはまだ非常に簡単です。
関連
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] PHPでユーザー入力をサニタイズするにはどうすればよいですか?
-
[解決済み] JavaScriptで複数ケースを扱うSwitch文
-
[解決済み] switch文の複数ケース
-
[解決済み】PHPで複数のコンストラクタを行うための最良の方法
-
[解決済み】1つのswitch case文に2つの値を使用する場合
-
[解決済み】各「when」ブロックに複数の値を指定するCaseステートメント
-
[解決済み】連続したintに対するJavaのswitchは、ケースを追加することでより速く実行されるように見えるのはなぜですか?
最新
-
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 & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】未定義の関数mysql_query()をLoginで呼び出す【重複
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み】In_arrayが動作しない。
-
[解決済み] 致命的なエラーです。mysqli_result 型のオブジェクトを使用できません [終了] 。