我有这样的事情:
<?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;
?>
脚本比这更复杂,但问题只涉及到这一点,显然,我得到了一个低内存错误。
我该如何解决这个问题?
答案 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
的值。