static function sql_connect($sql_details) {
try {
$db = @new PDO("mysql:host={$sql_details['host']};dbname={$sql_details['db']}",
$sql_details['user'],$sql_details['pass'],array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$db->exec("set names utf8");
$db->exec("set character_set_client='utf8'");
$db->exec("set character_set_results='utf8'");
$db->exec("set collation_connection='utf8_bin'");
}
catch (PDOException $e) {
self::fatal("An error occurred while connecting to the database. ".
"The error reported by the server was: ".$e->getMessage());
}
return $db;
}
这里我有4个if语句;它们是如何减少代码相同的。
答案 0 :(得分:2)
还有很多方法可以做到这一点。这里有两种我知道的方式:
使用switch
声明:
switch((arg[i].slice(0,2)) {
case 'cl' : cl.push(arg[i]); break;
case 'di' : di.push(arg[i]); break;
case 'sp' : sp.push(arg[i]); break;
case 'he' : he.push(arg[i]); break;
}
将数组放入对象并使用[]
表示法:
var cl=[],di=[],sp=[],he=[];
var map = {
cl : cl,
di : di,
sp : sp,
he : he
};
for(var i=0;i<arg.length;i++){
var key = arg[i].slice(0,2);
if (map[key]) map[key].push(arg[i])
}
答案 1 :(得分:0)
不是因为每个数组都有单独的变量。 (尽管您可以使用switch
或if else
来提高效果。)
但是,如果将数组作为单个对象的一部分,则可以相当多地减少if语句代码。像这样举例如:
var myArrays = {
cl: [],
di: [],
sp: [],
he: []
};
function pusher(arg) {
for (var i = 0; i < arg.length; i++) {
// Check to ensure length is at least 2 characters.
if(arg[i].length < 2)
continue;
var a = arg[i].slice(0, 2);
// Check to ensure value exists in myArrays.
if(myArrays[a])
myArrays[a].push(arg[i]);
}
}
当然我已经添加了额外的验证,所以如果最终仍有大量的线条。但它可以重复使用并满足您的需求。
如果你只有4个数组那么这很好,但也许这是一个减少的例子?如果是这种情况,您可能需要考虑动态创建数组。作为一个简单的例子:
var myArrays = {};
myArrays['cl'] = [];
myArrays['di'] = [];
// etc...
您可以使用此方法创建任意数量的内容,如果需要,甚至可以将其基于某些列表。