冗余if语句

时间:2018-03-27 12:15:04

标签: php

我想知道我是否可以加速我的进程,而这是我认为可能需要更长时间的时间。

基本上,我在db2和mysql中运行不同的select语句。我将这些结果加载到数组中以准备它们进行比较。然后我将计数数组并将它们用作条件 在我的if语句中。

问题是我有3个IF / ELSE部分,前2个执行相同的操作(执行相同的插入语句,仅基于2个不同的条件)。

$count3 holds records that exist in the table and have expired
$count4 holds records that exist in the table and have not expired

因此,如果它们都是空的,那意味着记录不存在,所以我插入。如果$ count3不为空,这意味着那些记录已经过期,所以我也插入了。如果$ count4不为空,则表示记录未过期,因此我更新。我想知道如果前两个IF / ELSE块的冗余是否需要更长的时间,那么这个冗余是不是可能。

以下是代码:

if(empty($count3) && empty($count4)){

    //execute query 1
}
elseif(!empty($count3)){

    //execute query 1
}
elseif(!empty($count4)){

    //execute query 2
}

有没有更好的方式来表达:

if (count3 and count4 are BOTH empty) OR if(count3 is not empty){
     insert
}elseif(count 4 is not empty){
    updated
}

4 个答案:

答案 0 :(得分:1)

真相表:

c3      c4      query
-------------------
empty   empty   1
!empty  empty   1
empty   !empty  2
!empty  !empty  1   

所以,简化:

if (empty($count3) && !empty($count4)) {
    // query 2
} else {
    // query 1
}

答案 1 :(得分:1)

您的测试:

if(empty($count3) && empty($count4)){
    // #1
    //execute query 1
}
elseif(!empty($count3)){
    // #2
    //execute query 1
}
elseif(!empty($count4)){
    // #3
    //execute query 2
}

您的测试的真实表:

empty($count3) | empty($count4) | execute
---------------+----------------+---------
      true     |      true      | query1  (#1)
      true     |     false      | query2  (#3)
     false     |      true      | query1  (#2)
     false     |     false      | query1  (#2)

我们可以看到,query 2仅在$count3为空且$count4不为空时执行。在所有其他情况下,query 1被执行。

使用此信息,代码可以重写为:

if (empty($count3) && !empty($count4)) {
    // execute query 2
} else {
    // execute query 1
}

答案 2 :(得分:0)

你自己说了答案:

if((empty($count3) && emtpy($count4)) || (!empty($count3))){
}

还是我误会?

关于进程速度,if语句complixity为n。除非您拥有数十亿的数据,否则现代计算机并不多。所以检查条件"什么都不是"并不重要

答案 3 :(得分:0)

这对你有用:

<?php 

if (empty($count3) && !empty($count4)){ 

// update the record

}else{ 

// insert the record 
}

?>

但if语句对速度过程的影响不会大于检查条件的方式。你提到'我正在运行不同的选择语句'我认为可以/应该改变。如果要检查是否存在行,请使用mysql exists()而不是select。因为当我们的数据很大时,选择将真正影响您的执行时间。