canabatz Posted December 8, 2011 Share Posted December 8, 2011 Hi all, i have this records that coming from the database: 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 i want to build a loop that will do like that: if ($res==0) {$res11==number} if ($res was allready 0 ignore it) if ($res==1 ignore it and all other $res=1 and wait till it's $res=0 again if ($res==0 again) { $res11==newnumber } please guide me to doing that, im stuck! thanks Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/ Share on other sites More sharing options...
ManiacDan Posted December 8, 2011 Share Posted December 8, 2011 Make use of flags. Make a variable called "insideAStringOfZeroes." Set it to true at the end of the loop when you hit a zero, set it to false when you hit a 1. You can then check to see if you're inside a string of zeroes or 1s. Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295875 Share on other sites More sharing options...
freelance84 Posted December 8, 2011 Share Posted December 8, 2011 this might work $zeroFlagger = 0; for ( $i = 0 ; $i < $numberResults ; ++$i) { if ($res==0 && $zeroFlagger!= 1) { $res11='number'; //set this re11 var to what ever you require it to be $zeroFlagger = 1; } elseif ($res==1) { $zeroFlagger = 0; } } Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295880 Share on other sites More sharing options...
canabatz Posted December 8, 2011 Author Share Posted December 8, 2011 can this work: $insideAStringOfZeroes=''; if ($res==0 && $insideAStringOfZeroes!=1) { $insideAStringOfZeroes=1; // do something } else if ($res==1) { // do nothing $insideAStringOfZeroes=0; } Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295886 Share on other sites More sharing options...
Psycho Posted December 8, 2011 Share Posted December 8, 2011 I'm a little confused by your 'logic', but I think what you are trying to say is that you want to set a value each time the result zero is encountered IF the previous result was not 0. $lastRes = ''; while($row = mysql_fetch_assoc($result)) { if($row['res'] == 0 && $lastRes != 0) { //This line is only executed if 'res'=0 and the last 'res' was not 0 $res11 = $row['number']; } $lastRes = $row['res']; } Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295888 Share on other sites More sharing options...
canabatz Posted December 8, 2011 Author Share Posted December 8, 2011 thanks mjdamato. but if there is res=1 how do i skip it? Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295895 Share on other sites More sharing options...
ManiacDan Posted December 8, 2011 Share Posted December 8, 2011 the PHP keyword 'continue' skips to the next iteration of a loop. Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295905 Share on other sites More sharing options...
canabatz Posted December 8, 2011 Author Share Posted December 8, 2011 Im not php Professional yet. a little example will be perfect thanks Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295906 Share on other sites More sharing options...
canabatz Posted December 8, 2011 Author Share Posted December 8, 2011 mjdamato, your code is good, but only for one number. the code dose not get the new number result! any why to do it differently ? thanks Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1295914 Share on other sites More sharing options...
Psycho Posted December 8, 2011 Share Posted December 8, 2011 The code I provided was only mock code based upon the requirements as I understood it. You did not provide enough information to provide a full-fledged solution or to even validate it was the correct solution for you. having said that . . . but if there is res=1 how do i skip it? With the code I provided, you don't need to skip. The if() condition in that loop would only update $res11 if the 'res' value is 0 AND the last value was not 0. But, you don't want to 'skip' the 1's because you need to update $lastRes with the 1. your code is good, but only for one number. the code dose not get the new number result! any why to do it differently ? I'm really not understanding you here. I'm guessing English is not your native language so please try to be specific. Can you provide an example of the data you are using and "how" the output is not what you expect/want? EDIT: I did find one bug which would prevent the very first record from being processed correctly - if the first record's res value was 0. But, all other scenarios will work as I intended. The problem was that I set the initial value of $lastRes to an empty string and when I did the comparison $lastRes != 0 It was resulting in true, because using a non type specific comparison and empty string is logically equal to 0 (or false). This can be fixed by making the comparison type specific or setting th einitial value to something like a negative 1. Here is the slightly modified code. I replaced the while() loop with a foreach() loop so I could test the process on an array using values similar to what you had in your first post. I have also included the output of the test. //Array of value to test against $testArray = array( array('res' => 0, 'number' => 1), //Starting 0 value array('res' => 0, 'number' => 2), array('res' => 0, 'number' => 3), array('res' => 1, 'number' => 4), array('res' => 1, 'number' => 5), array('res' => 1, 'number' => 6), array('res' => 1, 'number' => 7), array('res' => 1, 'number' => , array('res' => 0, 'number' => 9), //Starting 0 value array('res' => 0, 'number' => 10), array('res' => 1, 'number' => 11), array('res' => 1, 'number' => 12), array('res' => 1, 'number' => 13), array('res' => 1, 'number' => 14), array('res' => 1, 'number' => 15), array('res' => 0, 'number' => 16) //Starting 0 value ); $lastRes = 1; //while($row = mysql_fetch_assoc($result)) foreach($testArray as $row) { if($row['res'] == 0 && $lastRes !== 0) { //This line is only executed if 'res'=0 and the last 'res' was not 0 $res11 = $row['number']; echo "A New '0' was encountered. res11 now equals {$res11}<br>\n"; } $lastRes = $row['res']; } Output A New '0' was encountered. res11 now equals 1 A New '0' was encountered. res11 now equals 9 A New '0' was encountered. res11 now equals 16 Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1296006 Share on other sites More sharing options...
canabatz Posted December 9, 2011 Author Share Posted December 9, 2011 Hi mjdamato , i dont know how to thank you for taking the time to write and test this code. your code is perffect! but i got small problem. im trying to get the results from the database while doing what i need . $sql=mysql_query("SELECT * FROM `my_table` ")or die(mysql_error()); while ($row=mysql_fetch_assoc($sql)) { $testArray= array( array ('res' =>$row['something'], 'number' =>$row['something else']), ); } $lastRes = 1; foreach($testArray as $row) { if($row['res'] == 0 && $lastRes !== 0) { //This line is only executed if 'res'=0 and the last 'res' was not 0 $res11 = $row['number']; echo "A New '0' was encountered. res11 now equals {$res11}<br>\n"; } $lastRes = $row['res']; } im not geting anny result back , if i put your test code it's working!! can it be a problem to add returned results from the database in the while loop!! thanks a Billion! Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1296213 Share on other sites More sharing options...
Psycho Posted December 9, 2011 Share Posted December 9, 2011 You don't need to dump the DB results into an array, simple run the same code in the while() loop when extracting the results. But, the problem with your code above is that you are redefining the array on each iteration of the while() loop instead of appending the results! The code should look something like this (replace 'res' and 'number' with the appropriate DB field names) $sql = mysql_query("SELECT * FROM `my_table` ")or die(mysql_error()); $lastRes = 1; while ($row=mysql_fetch_assoc($sql)) { if($row['res'] == 0 && $lastRes !== 0) { //This line is only executed if 'res'=0 and the last 'res' was not 0 $res11 = $row['number']; echo "A New '0' was encountered. res11 now equals {$res11}<br>\n"; } $lastRes = $row['res']; ) Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1296299 Share on other sites More sharing options...
canabatz Posted December 9, 2011 Author Share Posted December 9, 2011 Thanks alllllooot man, it's working!!! Quote Link to comment https://forums.phpfreaks.com/topic/252774-get-the-right-number-in-loop/#findComment-1296389 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.