gpt4 book ai didi

php - 如何优化循环中未使用先前 ifs 的 if else if 语句?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:53 25 4
gpt4 key购买 nike

这是假设的代码,假设我有以下内容:

假设我有一个数组,它有很多数据,在这个示例问题中是整数,但它可以是任何类型的数据,这些数据已经根据 if 语句以某种方式排序。

$a = array(0,0,0,1,1,1,1,1,1,2,2,2,2,3,3,...,9,9,9);

假设我有一个包含大量 if else if 语句的 for 循环,这些语句可以有任何做某事的标准。

for($i=0; i<count($a); i++) {
// these if statements can be anything and may or may not be related with $a
if($a[$i] == 0 && $i < 10) {
// do something
}
else if($a[$i] == 1 && $i < 20) {
// do something
}
else if($a[$i] == 2) {
// do something
}
else if($a[$i] == 3) {
// do something
}

// and so on
}

现在的问题是,在第一次 if 语句迭代完成后,它从未被使用过。一旦 for 循环开始使用下一个 if 语句,就不需要再次评估前一个 if 语句。它可以使用第一个 if 语句 n 次等等。

有没有办法优化它,使其在循环数据时不必遍历所有先前的 if else if 语句?请注意,数据可以是任何东西,而 if 语句可以是各种条件。

是否存在我没​​有看到的范式转变,即应如何编码以提供最佳性能所必需的范式转变?

最佳答案

您可以利用 call_user_func_array .您需要构建一个类来存储调用以执行语句的方法。考虑这样一个类:

class MyStatements {
public function If0($a, $i) {
if($a[$i] == 0 && $i < 10) {
// do something
}
}

public function If1($a, $i) {
if($a[$i] == 1 && $i < 20) {
// do something
}
}
}

然后你可以做这样的事情:

$stmts = new MyStatements();
for($i = 0; i < count($a); i++) {
call_user_func_array(array($stmts, 'If' . strval($i)), array($a, $i));
}

关于php - 如何优化循环中未使用先前 ifs 的 if else if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18322025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com