1. ホーム
  2. php

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() のようにきれいではありませんが、これは唯一の 速い しかし、整頓するための関数やクラスの小さなライブラリを書く必要がない、唯一の高速なソリューションです。配列に項目を追加するのはまだ非常に簡単です。