Jump to content
Larry Ullman's Book Forums
Sign in to follow this  
bevc

Trouble With A Foreach Loop Not Iterating Through

Recommended Posts

I'm having a problem with a foreach loop that isn't doing what I need it to. I want to take an array of id numbers, fetch the figures related to that id number from my mysql db and sum them. Initially the problem was that my loop was 'overwriting itself' so that the only summing it did was of the last id number. Then after I fixed that, although I have used a 'unique array', it seems that the loop is still summing everything, ie if the array contains the same id number 8 times, it loops through and multiplies that figure x8 (at least I think that's what it's doing). I'm not sure why  :unsure:

while($row_outputs=mysqli_fetch_array($run_projects)){

                            $prog_name = $row_outputs['prog_name']; 
                            $proj_name = $row_outputs['name'];
                            $projectId = $row_outputs['id'];
                    
                            
                            $proj_array = array($projectId); 
                            $proj_array_uni = array_unique($proj_array);  

                            $projecty = ''; 

                 foreach($proj_array as $projectile){
            
                        $projectile = trim($projectile); 
                        $projecty .= $projectile;
          


    $get_outputs_active = "SELECT * FROM projects WHERE project_id=$projectile AND impact_area='1'";
    
    $run_outputs_active = mysqli_query($conn, $get_outputs_active);

  
    
    while ($row_outputs_active =mysqli_fetch_array($run_outputs_active)){

        $total_outputs_active += $row_outputs_active['total_cost'];

    }

    $ftotal_outputs_active = number_format($total_outputs_active,2);

   

    $get_outputs_run = "SELECT * FROM projects WHERE project_id=$projectile AND impact_area='2'";
    
    $run_outputs_run = mysqli_query($conn, $get_outputs_run);

    
    
    while ($row_outputs_run =mysqli_fetch_array($run_outputs_run)){

        $total_outputs_run += $row_outputs_run['total_cost'];

    }

}
?>

Can anybody see what my problem is? Thanks. 

 

 

 

 

 

Share this post


Link to post
Share on other sites

You are missing a closing brace.

 

To help diagnose issues like this, I always line my opening and closing braces up vertically so I can see where they start and end.  Then, indent subservient routines also lining up the opening and closing braces.

 

For me anyway, it helps to see what code loops are embedded in other loops, etc.

 

Hope it helps.

  • Upvote 1

Share this post


Link to post
Share on other sites

for some reason my indents are not displaying but it may help anyway - hope so.

 

while($row_outputs=mysqli_fetch_array($run_projects))

{ // opening while loop

 

$prog_name = $row_outputs['prog_name'];

$proj_name = $row_outputs['name'];

$projectId = $row_outputs['id'];

$proj_array = array($projectId);

$proj_array_uni = array_unique($proj_array);

$projecty = '';

 

foreach($proj_array as $projectile)

{

 

$projectile = trim($projectile);

$projecty .= $projectile;

 

$get_outputs_active = "SELECT * FROM projects WHERE project_id=$projectile AND impact_area='1'";

 

$run_outputs_active = mysqli_query($conn, $get_outputs_active);

 

while ($row_outputs_active =mysqli_fetch_array($run_outputs_active))

{

 

$total_outputs_active += $row_outputs_active['total_cost'];

 

} // end while 2

 

$ftotal_outputs_active = number_format($total_outputs_active,2);

 

$get_outputs_run = "SELECT * FROM projects WHERE project_id=$projectile AND impact_area='2'";

 

$run_outputs_run = mysqli_query($conn, $get_outputs_run);

 

while ($row_outputs_run =mysqli_fetch_array($run_outputs_run))

{

 

$total_outputs_run += $row_outputs_run['total_cost'];

 

} // end while 3

 

} // end foreach

} // end opening while loop

?>

Edited by Necuima
  • Upvote 1

Share this post


Link to post
Share on other sites

You are missing a closing brace.

 

To help diagnose issues like this, I always line my opening and closing braces up vertically so I can see where they start and end.  Then, indent subservient routines also lining up the opening and closing braces.

 

For me anyway, it helps to see what code loops are embedded in other loops, etc.

 

Hope it helps.

 

It wasn't that, but thank you very much for the reply. I also realised that I put the wrong array in the foreach, but that didn't fix it either! I can't figure it out, so I've gone back to the drawing board to try something else. Cheers.  

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...