检查是否有任何字符串有长度,连接或使用OR?

时间:2017-01-11 14:23:46

标签: php if-statement

我有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中将这些字符串连接起来进行检查,无论是性能还是潜在的逻辑问题。看到所有需要做的就是检查是否有任何字符串有长度,我没有看到缺点。

3 个答案:

答案 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次。