0

少し変わったものに出会いました。私は次の三項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++ ;
}

私のミスです!ループの反復ごとに $output が指数関数的に大きくなっていることに気付きました。$output .= ($row['creditUsed'] > $row['creditLimit'] ? 'color:red;' : '') ; に変更しました。

そして、それは大丈夫です。

ごめん!

4

1 に答える 1

2

それ自体に繰り返し追加$outputしているため (条件が失敗した場合)、反復ごとにサイズが 2 倍になります (つまり、指数関数的な成長)。

ここで本当に三項演算子を使用する必要がある場合は、元の文字列ではなく、3 番目のオペランドに空の文字列を追加する必要があります。

$output .= ($row['creditUsed'] > $row['creditLimit'] ? 'color:red;' : '');
于 2012-05-16T08:33:58.150 に答える