你会如何执行这个 PHP switch 语句?
另请注意,这些版本要小得多,我需要创建的版本将添加更多的值。
版本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;
}
检测结果:
我进行了 10,000 次迭代的速度测试,
时间 1: 0.0199389457703 // If 语句
时间2:0.0389049446106 //switch语句
时间 3: 0.106977939606 // 数组
对于任何有未知字符串并且需要找出一堆字符串中的哪一个的情况other当您添加更多项目时,唯一不会变慢的解决方案是使用数组,但将所有可能的字符串作为键。因此您的开关可以替换为以下内容:
// 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()
,但这是唯一的fast解决方案不包括编写一个小型函数和类库以保持整洁。将项目添加到数组中仍然非常容易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)