优化php条件

时间:2011-04-02 16:29:18

标签: php

我有这样的事情:

<?php

$fix1 = XXXXXXX //Integer. Problem isn't here. Extracted automatically

$iffix1 = range(9000000,8000000);
$iffix2 = range(7999999,7888888);
...

//There're more iffix[XX]s, up to $iffix60

if($fix1 = in_array($iffix1)) {
    $var1 = 1;
} elseif($fix2 = in_array($iffix2)){
    $var2 = 2;
} ....

//I have 60 more elseifs as well

$result = $var1 * $fix1;
echo $result;

?>

脚本比这更复杂,但问题只涉及到这一点,显然,我得到了一个低内存错误。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

而不是

if($fix1 == in_array($iffix1)){

你可以做到

if($fix1 >= 8000000 && $fix1 <= 9000000) {

这样,您可以摆脱$iffix - 数组,因此您不必存储大约100万个整数的数组。另外,检查两个外边界要快得多,而不是检查内部的100万个整数。

其他条件也一样。

答案 1 :(得分:3)

没有任何真正的线索你正在尝试做什么,这里有一些代码:

$ranges = array(
    array(8000000,9000000),
    array(7888888,7999999),
    ...
);

$fix = 1234567;
$var = 0;

foreach($ranges as $range) {
    $var++;
    if($range[0] < $fix1 && $fix1 < $range[1])
        break;
}

echo $fix * $var

答案 2 :(得分:0)

你的$iffix*阵列真的很大,似乎包含数千个项目 - 这需要大量内存,并且可以解释你超越memory_limit,这会导致致命错误。

最明智的想法是重新思考你在做什么,以避免需要这么多记忆。

否则,您可能需要增加memory_limit的值 - 但如果这是针对具有许多用户的Web应用程序,则可能不是一个好主意......

答案 3 :(得分:0)

你的整个设计值得怀疑。不要使用60个变量,而是使用变量数组(经验法则:如果变量名中有数字,那么你做错了)。不要生成范围内的所有数字,而是使用表示范围的对象。请注意,if ($fix1 = in_array(...))实际上会更改$fix1的值。