Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果在循环中使用if-else,或者在if-else中使用两个不同的循环,使用函数调用,或者在if-else中重复相同的代码,有什么更好的方法?_Php_Optimization - Fatal编程技术网

Php 如果在循环中使用if-else,或者在if-else中使用两个不同的循环,使用函数调用,或者在if-else中重复相同的代码,有什么更好的方法?

Php 如果在循环中使用if-else,或者在if-else中使用两个不同的循环,使用函数调用,或者在if-else中重复相同的代码,有什么更好的方法?,php,optimization,Php,Optimization,因此,我试图优化一段php代码,该代码基本上基于用户输入在两个不同的数据集上运行相同的操作。什么是更好、更优化的方法 //$input = //user input //$a = [1,2,3 .....]; //$b = [a,b,c .....];//both are same length - n case 1 : for($i =0; $i<n; $i++) { if($input == 'a') //doSomething with $a[i] -

因此,我试图优化一段php代码,该代码基本上基于用户输入在两个不同的数据集上运行相同的操作。什么是更好、更优化的方法

//$input = //user input
//$a = [1,2,3 .....];
//$b = [a,b,c .....];//both are same length - n


case 1 : 

for($i =0; $i<n; $i++) {
    if($input == 'a')
        //doSomething with $a[i] - code here
    else
        //doSomething with $b[i] - code here

}

case 2 : 
if($input == 'a') {
    for($i =0; $i<n; $i++) {
        //doSomething with $a[i] - code here
    }
}
else {
    for($i =0; $i<n; $i++) {
        //doSomething with $b[i] - code here
    }
}



case 3 : 
if($input == 'a') {
    for($i =0; $i<n; $i++) {
        doSomething($a[i]);
    }
}
else {
    for($i =0; $i<n; $i++) {
        doSomething($b[i]);
    }
}
//$input=//用户输入
//$a=[1,2,3….];
//$b=[a,b,c….]//两者长度相同-n
案例1:
对于($i=0;$i更好总是很难量化的,但是如果您想对输入进行完全相同的处理,只需根据输入选择一个数据集,您最好只设置一个输入数组并处理它

if($input == 'a')
    $dataset = $a;
else
    $dataset = $b;
foreach ( $dataset as $dataItem ) {
    //doSomething data code here
}

这可能不是您真正想要的答案,但老实说,我只会选择最能传达实际用例的东西,而不是尝试过多优化

就性能而言,除非检查
$input
的操作花费大量时间(数量级比简单比较多),或者如果
$dataset
上的操作非常短(与输入检查相当),否则这根本不重要

假设在处理数据集时,
$input
不会发生变化,我会选择第三种情况。您明确表示,这是同一个操作,不同if分支之间的唯一区别是正在使用的数据集。如果您熟悉三元运算符,我甚至会使用:

for($i = 0; $i < n; $i++) {
    doSomething(($input == $a) ? $a[i] : $b[i]);
}
($i=0;$i{ doSomething(($input==$a)$a[i]:$b[i]); }
只要这段代码实际上没有性能问题,我随时都会将代码可读性置于微优化之上


作为奖励,阅读一下关于优化的这个问题:

我敢说,你甚至可以使用变量…
$dataset=$$input
(或者最好使用数组而不是单个变量,验证输入yada-yada)…@deceze,我只是患上了妄想症,为了几行代码,我喜欢它按照tin方法所说的去做。当然,使用变量会带来很多警告。这里的问题是,我只从调用方法中得到一个数据集作为输入,所以$a为null,或者$b为null,显而易见s的选择是将它们加入到相同的方法中,但是,由于其他关键脚本的原因,我无法做到这一点,这里的所有内容都是关于性能优化的,因为脚本将理想地处理10k倍数的记录,而且,dosomething不是一个简单的处理,而是一组复杂的语句,甚至包括数据库命中等。Di你运行过性能测试吗?还没有运行过。我会立即运行