|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2001-03-27 11:07 UTC] svein at edbc dot no
I have a strange situation;
I have this code :
$c = count($myarray);
echo $c . '<br>';
for ($i=0; $i<$c; $i++) {
code goes here...
}
echo often often output that $c is 0 BUT the for loop ALWAYS execute...
I also have tried to sorrund the for loop with this :
if ($c>0) {
for(...)
}
and it STILL execute if $c==0
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 05:00:01 2025 UTC |
I can't reproduce this (using code below): <?php $c=0; for($i=0; $i<$c; $i++) { echo "yes\n"; } ?> Could you try this one? And note: If the variable passed to count() is not an array, it will return 1. --JaniIts not easy reproduceable - i have only seen this happens ONCE - in the specified function. Its NOT a simple for-loop - the for-loop executes INSIDE a recursively called function. I've also tried this one : --- $c = count($myarray); if ($c>0) { echo "c is greater than 0<br>"; for (...) { ...code } } --- then IF c is 0 the echo statement doesnt execute BUT the for loop executes... I cant figure out why... If some of you want it i can mail you the file so you can see the things in perspective. - SveinI post the function that cause the problem. Its the for-loop int the wery bottom of the function that cause my problem. If you can see any wrong logic in the code please let me know :) I have solved this problem in another way in my current code. The code below have worked for a long time, but stopped working and caused described problem after installing - i think php4.0.4 or 4.0.4pl1 Even if i surrond the for-loop with this : echo "<br>First : $c"; if ($c!=0) { echo "<br>Second : $c"; for (..) { echo "<br>Inside for-loop..."; ... } } the first echo output 0 but the second echo output another value like 1 or 2. The strange thing is that if the FIRST echo output 0 the SECOND echo doesnt execute **BUT** the for-loop execute! // Parse the parts of message and get info on each function parseparts($ref, $ofs='') { global $part_no, $msg_part, $imap, $sorted_msgs, $msg_no, $bgcolor, $background, $folder; global $sort_order; $part_no++; $msg_part[$part_no] = $ref; $msg_part[$part_no]->index = $ofs; $ac = count($ref->dparameters); for ($i=0; $i<$ac; $i++) if (eregi($ref->dparameters[$i]->attribute, 'filename')) { $msg_part[$part_no]->filename = $ref->dparameters[$i]->value; break; }; $ac = count($ref->parameters); for ($i=0; $i<$ac; $i++) if (eregi($ref->parameters[$i]->attribute, 'name')) { $msg_part[$part_no]->name = $ref->parameters[$i]->value; break; }; if (!strcmp($msg_part[$part_no]->subtype, 'HTML')) { // Get background for HTML message $tmp = @imap_fetchbody($imap, $sorted_msgs[$msg_no-1], $msg_part[$part_no]->index); // Encode data switch($msg_part[$part_no]->encoding) { case ENCBASE64 : $tmp = @imap_base64($tmp); break; case ENCQUOTEDPRINTABLE : $tmp = @imap_qprint($tmp); break; }; // Background color if (preg_match('/<BODY.*?BGCOLOR=([^\s]+)>/si', $tmp, $tmp2)) { $bgcolor=$tmp2[1]; $bgcolor = 'BGCOLOR="'.preg_replace('/\"/', '', $bgcolor).'"'; } else $bgcolor='BGCOLOR="#ffffff"';; // Remove any " // Background image if (preg_match('/<BODY.*?BACKGROUND=([^\s]+)>/si', $tmp, $tmp2)) $tmp=$tmp2[1]; else $tmp=''; if (!empty($tmp)) { $background = "background=\"getpart.phtml?1get_type=1&part_id=".rawurlencode(ereg_replace("\"", '', $tmp))."\""; } else $background = ''; }; $c = count($ref->parts); for ($p=0; $p<$c; $p++) { if (empty($ofs)) $of = ''.($p+1); else $of = $ofs.'.'.($p+1); parseparts($ref->parts[$p], $of); }; }; // Get info on each parts parseparts($msg_struct);