Jump to content

skipping a loop or two in a while loop


westman

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 comment
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 comment
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 comment
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 comment
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 comment
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 comment
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 comment
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 comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...