三元IF导致内存不足

时间:2012-05-16 08:29:25

标签: php memory-leaks ternary-operator

我遇到了一些奇怪的事情。我试图使用以下三元if语句:

$output .= ($row['creditUsed'] > $row['creditLimit'] ? 'color:red;' : $output) ;

导致我的浏览器挂起并最终导致PHP内存不足错误。

现在我只是使用:

if($row['creditUsed'] > $row['creditLimit'])
{
    $output .= 'color:red;' ;
}

哪个工作正常。

有谁知道为什么会这样? if语句是在while循环中,完整代码太多而不能发布:

$i = 0 ;
while($row = $result->fetch(PDO::FETCH_ASSOC)) {

if($i == 0)
{
    //something
}
if($row['amountDue'] > $row['amount'] && $row['amount'] > 0.01)
{
// Stuff
}
else
{
    $output .= ($row['creditUsed'] > $row['creditLimit'] ? 'color:red;' : $output) ;
}
$i++ ;
}

这是我的错!我意识到$ loop的每次迭代都会以指数方式变大。我改成了: $ output。=($ row ['creditUsed']> $ row ['creditLimit']?'color:red;':'');

没关系。

抱歉!

1 个答案:

答案 0 :(得分:2)

你反复将$output附加到自身(如果条件失败),导致每次迭代时它的大小加倍(即指数增长)。

如果你真的必须在这里使用三元运算符,你需要在第三个操作数中附加一个字符串,而不是原始字符串:

$output .= ($row['creditUsed'] > $row['creditLimit'] ? 'color:red;' : '');
相关问题