Php 检查是否有任何字符串具有长度、连接或使用或?

Php 检查是否有任何字符串具有长度、连接或使用或?,php,if-statement,Php,If Statement,我有5个字符串需要检查if条件中的长度,如果有任何字符串长度,则为true!=0 通常你会看到: if(strlen($1) != 0 || strlen($2) != 0 || strlen($3) != 0 || strlen($4) != 0 || strlen($5) != 0){} 但我坐在这里想,拥有所有这些或条款(无论是不是另一回事)是没有效率的 所以,我试着: if(strlen($1.$2.$3.$4.$5) != 0){} 当然,它是有效的。但是,我想知道是否有任何理由我

我有5个字符串需要检查if条件中的长度,如果有任何字符串长度,则为true!=0

通常你会看到:

if(strlen($1) != 0 || strlen($2) != 0 || strlen($3) != 0 || strlen($4) != 0 || strlen($5) != 0){}
但我坐在这里想,拥有所有这些或条款(无论是不是另一回事)是没有效率的

所以,我试着:

if(strlen($1.$2.$3.$4.$5) != 0){}

当然,它是有效的。但是,我想知道是否有任何理由我应该而不是将这些字符串连接在一个strlen中以检查性能或潜在的逻辑问题。考虑到所有需要做的就是检查任何字符串是否有长度,我看不出有任何缺点。

如果它是在javascript中,我只会看到一个问题,如果在需要连接时这些值中有一个未定义,我想这符合您的偏好


但是,您想说的内容的可读性可能会根据您所使用的内容而改变。

使用以下工具进行一些基准测试:

$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";
运行#2:

运行#3:

跑4

运行#5:

结论:


连接似乎比其他连接快2到3倍。

如果您喜欢,请使用它以“意见”开始提问堆栈溢出是一种很好的关闭方法。一次调用
strlen
显然比多次调用
strlen
要快。@mistermartin,但这是否超过了将多个字符串连接在一起的成本(请参见)?我会说,使用任何能保持代码可读性最好的方法(有时看起来像膨胀的代码)! 或者,如果您执行了类似于上面的操作,显然也没问题——如果它给出了预期的结果,但是请确保您对代码进行了注释!如下图所示,速度差(从总体上看)可以忽略不计。
using || : 0.1004638671875
using or : 0.066226959228516
concat : 0.030498027801514
using || : 0.088317155838013
using or : 0.082902908325195
concat : 0.06523609161377
using || : 0.081311225891113
using or : 0.064895153045654
concat : 0.028335809707642
using || : 0.099178075790405
using or : 0.093825101852417
concat : 0.048026084899902
using || : 0.091998100280762
using or : 0.064527034759521
concat : 0.031124114990234