我发现自己编写的代码如下:
foreach($array as $key => $value) {
switch($key) {
case 'something':
doSomething($value);
break;
case 'somethingelse':
doSomethingElse($value);
break;
}
}
有没有更好的方法来解决这个问题?对我来说似乎很脏,但我可能只是想多了。
我能想到的唯一其他替代方法是为每个键添加一个 if 语句,这似乎也好不到哪儿去。 IE。 :
if($array[0] == 'something') {
doSomething($array[0]);
}
if($array[1] == 'somethingelse') {
doSomethingElse($array[1]);
}
(或类似的东西)
如果需要,我可以发布确切的代码,但这是发生的事情的大纲。请批评,但请记住,我在这里寻求帮助。因此,如果我做错了什么,请指出来。
最佳答案
将您的函数映射到字典/关联数组中的键是这种情况的常用方法(正如@jldupont 所提到的)——不仅在 PHP 中如此,在许多具有关联数组的动态语言中也是如此。例如,Python 和 Lua 甚至没有 switch 语句——这几乎是模拟开关的唯一方法。
考虑这种方法:
<?
$arr[] = "bye";
$arr[] = "hi";
function sayHi() { print("Hello.\n"); }
function sayBye() { print("Goodbye.\n"); }
$funcs["hi"] = sayHi;
$funcs["bye"] = sayBye;
foreach($arr as $k){
$funcs[$k]();
}
?>
输出:
Goodbye. Hello.
当您只有两个不同的值时,这是一种过大的杀伤力,但显然随着您必须涵盖的情况数量的增加,它变得更有值(value)。
关于php - 这是一个糟糕的模式吗? (在 for/foreach 循环内切换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653079/