Jump to content

skipping a loop or two in a while loop


Recommended Posts

Hi all,
I would like to escape a loop if $mainRow's value has already been called.
Here is what I have but it is not working.

while ($stmt->fetch()) {
$mail_main[] = $mainRow;

$main_arr .= ''.$main_arr.', '.$mainRow.'';
$main_arr_array = explode(",", $main_arr);
if (in_array($mainRow, $main_arr_array, TRUE)){
continue;
//break;
}
}

 

Edited by westman
Link to post
Share on other sites

If you want to exit the loop you can use break instead of continue.

That code is pretty weird though.  Why do you concatenate everything in a string and then explode to an array, why not just add the new value to the array?  Also, wouldn't that in_array check always be true, because you just added it to the array right before checking?

Link to post
Share on other sites

thank you.
I didn't see that.
I have updated my code

$main_arr_array = explode(",", $main_arr);
if (in_array($mainRow, $main_arr_array, TRUE)){
continue;
//break;
}
$main_arr .= ''.$mainRow.', ';

echo $main_arr;

This is the result...
5, 6, 5, 4, 3, 2, 1,
I only want one 5 to show.
How do I skip the loop?

Edited by westman
Link to post
Share on other sites

I have updated the code once more...

$main_arr = '';
$main_arr_array = "";
// code
while ($stmt->fetch()) {
$mail_main[] = $mainRow;

$main_arr_array = explode(",", $main_arr);
if (in_array($mainRow, $main_arr_array, TRUE)){
continue;
//break;
}else{
$main_arr .= ''.$mainRow.', ';
//$main_arr .= implode(", ",$mainRow);
//$tmparray = implode(", ",$tmparray);
}

}


I am still not getting the skip.
Could you give a code example please?
 

Link to post
Share on other sites

You should not be using strings for this operation, work with arrays and then convert the result to a string (if necessary) when you're done.

I also recommend using a set rather than a list to check for duplicate items. A set is a data structure where the item itself is its own identifier. Finding an item in a set is much faster than searching for it in a list.

$already_used = []; // This is a set
$list = []; // This is a list

// Loop through results
while($row = $stmt->fetch()) {

  // Make sure that the item is not already in the set
  if(!isset($already_used[$row])) {

    // Add the item to the set
    $already_used[$row] = true;

    // Add the item to the list
    list[] = $row;

  }
}

// If necessary, convert the result into a comma-separated string
$output = implode(',', $list);

 

Link to post
Share on other sites

thank you very much for the examples.
I am not sure I am using them right in my code.
 

while ($stmt->fetch()) {
$mail_main[] = $mainRow;

//$uniqueValueArray = []; this alone shows an error in Dreamweaver
$uniqueValueArray [] = $mainRow;
while($row = $stmt->fetch()) {

if (!in_array($row, $uniqueValueArray)) {
$uniqueValueArray[] = $row;
}
}

} // END while ($stmt->fetch()) {
echo implode(', ', $uniqueValueArray);

What am I doing so wrong?

Edited by westman
Link to post
Share on other sites

IF $mainRow represents a single variable value then

$uniqueValueArray = []; // this is now the normal way of declaring a array variable since PHP 5.4
while ($stmt->fetch()) {

if (!in_array($mainRow, $uniqueValueArray)) {
$uniqueValueArray[] = $mainRow;
}

} // END while ($stmt->fetch())

echo implode(', ', $uniqueValueArray);

 

  • Like 1
Link to post
Share on other sites

Dsonesuk,
Thank you.
Here is my new code


$uniqueValueArray = [];

while ($stmt->fetch()) {
$mail_main[] = $mainRow;

if (!in_array($mainRow, $uniqueValueArray)) {
$uniqueValueArray[] = $mainRow;
}else{
continue;
}

} // END while ($stmt->fetch()) {
echo implode(', ', $uniqueValueArray);


It seems to work well.
Is there any way I can remove the error Adobe DW is showing me with $uniqueValueArray = []; ?

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...
×
×
  • Create New...