我有5个字符串我需要检查if条件的长度,如果有任何字符串长度,则为true!= /。
通常你会看到这个:
if(strlen($1) != 0 || strlen($2) != 0 || strlen($3) != 0 || strlen($4) != 0 || strlen($5) != 0){}
但我坐在这里认为感觉(无论是否是另一回事)都没有效率地拥有所有这些OR条款。
所以,我试过了:
if(strlen($1.$2.$3.$4.$5) != 0){}
当然可行。但是,我想知道是否有任何理由我不在strlen中将这些字符串连接起来进行检查,无论是性能还是潜在的逻辑问题。看到所有需要做的就是检查是否有任何字符串有长度,我没有看到缺点。
答案 0 :(得分:0)
如果它是在javascript中我只看到一个问题,如果你需要连接时这些值是未定义的
答案 1 :(得分:0)
我认为这符合您的偏好。
但是,您所说的内容的可读性可以根据您使用的内容进行更改。
答案 2 :(得分:0)
用以下方法做一些基准测试:
$a = $b = $c = $d = $e = '';
$t = microtime(true);
for ($i = 0 ; $i < 1000000; $i++) {
if(strlen($a) != 0 || strlen($b) != 0 || strlen($c) != 0 || strlen($d) != 0 || strlen($e) != 0){}
}
echo 'using || : ',(microtime(true) - $t),"\n";
$t = microtime(true);
for ($i = 0 ; $i < 1000000; $i++) {
if(strlen($a) != 0 or strlen($b) != 0 or strlen($c) != 0 or strlen($d) != 0 or strlen($e) != 0){}
}
echo 'using or : ',(microtime(true) - $t),"\n";
$t = microtime(true);
for ($i = 0 ; $i < 1000000; $i++) {
if(strlen($a.$b.$c.$d.$e) != 0){}
}
echo 'concat : ',(microtime(true) - $t),"\n";
我明白了:
运行#1:
using || : 0.1004638671875
using or : 0.066226959228516
concat : 0.030498027801514
跑#2:
using || : 0.088317155838013
using or : 0.082902908325195
concat : 0.06523609161377
跑#3:
using || : 0.081311225891113
using or : 0.064895153045654
concat : 0.028335809707642
跑#4
using || : 0.099178075790405
using or : 0.093825101852417
concat : 0.048026084899902
跑#5:
using || : 0.091998100280762
using or : 0.064527034759521
concat : 0.031124114990234
<强>结论:强>
连接似乎比其他人快2到3次。