> So, using count() in a for is bad, but okay in a foreach ?
foreach makes a copy, for and each work directly on the subject.
the reason you were told to evaluate the count into a tmp var was to save the loop from re-evaluating a constant (in most cases, for the duration of the loop) value.
The following snippet illustrates this: <?php // for:
// with count: evaluated every iteration: $r = range(0,4); for ($i=0; $i<count($r); $i++) { echo "$i: {$r[$i]}\n"; if ($i == 4) $r[] = 'a'; }
echo "-----\n";
// with tmp var evaluated once: $r = range(0,4); $c = count($r); for ($i=0; $i<$c; $i++) { echo "$i: {$r[$i]}\n"; if ($i == 4) $r[] = 'a'; }
echo "-----\n"; echo "-----\n";
// foreach: // always makes a copy (no need for tmp var): $r = range(0,4); foreach ($r AS $i => $v) { echo "$i: $v ({$r[$i]})\n"; if ($i == 4) $r[] = 'a'; }
echo "-----\n"; echo "-----\n";
// each: // each works directly on the subject: $r = range(0,4); while (list($i, $v) = each($r)) { echo "$i: $v ({$r[$i]})\n"; if ($i == 4) $r[] = 'a'; }
?>
Output: [EMAIL PROTECTED]:~/php/tmp$ php loops.php 0: 0 1: 1 2: 2 3: 3 4: 4 5: a ----- 0: 0 1: 1 2: 2 3: 3 4: 4 ----- ----- 0: 0 (0) 1: 1 (1) 2: 2 (2) 3: 3 (3) 4: 4 (4) ----- ----- 0: 0 (0) 1: 1 (1) 2: 2 (2) 3: 3 (3) 4: 4 (4) 5: a (a)
HTH. Derick is correct, you should revert.
S