boo_lolly Posted April 20, 2007 Share Posted April 20, 2007 i know this is feasible i just can't remember how to do it! let's say i have 2 variables and their values will always be a positive number, except $var1 needs to be compared to $var2 to see which one is greater than the other. i need a function that will run some comparisons and the end result would be to return $var1 as the smaller of the two, and $var2 as the larger one. the trick is to only use 2 variables: $var1 and $var2. i've come up with a few things but none of them work. just a basic debugger for the foundation of this function i have: <?php $first = 10; $second = 2; (($first < 0) ? ($first *= -1) : ('')); (($second < 0) ? ($second *= -1) : ('')); echo "First = {$first}<br />\n"; echo "Second = {$second}<br />\n"; $second -= $first; echo "[\$second -= \$first] is {$second}<br />\n"; echo "First = {$first}<br />\n"; echo "Second = {$second}<br />\n"; ?> where i'm trying different variations of processing to the variables and printing out the operation in text, then giving the result. i know there's a way to do this without having to use a third variable in just a few lines of code. can anyone help me? Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/ Share on other sites More sharing options...
Glyde Posted April 20, 2007 Share Posted April 20, 2007 If you want to know which one has the greater absolute value (offset from 0) then it's simple: <?php function greatestNum($first, $second) { return abs($first) < abs($second) ? array($second, $first) : array($first, $second); } print_r(greatestNum(10, -100)); ?> Should output: Array ( [0] => -100 [1] => 10 ) Because -100 is further away from 0 than 10 is. Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233773 Share on other sites More sharing options...
boo_lolly Posted April 20, 2007 Author Share Posted April 20, 2007 i know how to determine which one has the greater value. what i want to do is replace the value of $var1 with the value of $var2 if the value of $var1 is greater than $var2. but, i want the original value of $var2 to be the previous value of $var1. again, without using anymore variables than $var1 and $var. make sense? btw i was wondering if there was an absolute value function but i didn't think any further than that, i just wrote that one line to do it. so, thanks for illustrating that point, bud. Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233775 Share on other sites More sharing options...
Glyde Posted April 20, 2007 Share Posted April 20, 2007 You can try this: <?php function swapGreater(&$first, &$second) { list($first, $second) = $first < $second ? array($second, $first) : array($first, $second); } ?> But I'm not sure if it'll work in PHP 4, or even PHP 5 for that matter...as it's untested. Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233776 Share on other sites More sharing options...
boo_lolly Posted April 20, 2007 Author Share Posted April 20, 2007 that wasn't really what i was going for, but i '<' changed to '>' and it worked perfectly and i'm going to use it. hrere's the finished func: <?php function swapGreater(&$first, &$second){ $first = abs($first); $second = abs($second); list($first, $second) = $first > $second ? array($second, $first) : array($first, $second); } ?> btw i'm running PHP 4. to be honest i was look for something like: <?php if($first > $second){ $first -= $second; $second += $first; } ?> or something similar. i don't know how to do it but i've seen it done before. i was just trying to see if anyone can help me understand how to do that. also, thank you for illustrating what '&' does. i've seen it every now and then in front of variables but i had no idea why people used it or what it's purpose was. i can see now it allows you to store it in an array, right? thanks again bro. Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233780 Share on other sites More sharing options...
Moon-Man.net Posted April 20, 2007 Share Posted April 20, 2007 Hey! Sorry to but in on this thread, what does += and -= do to the vars? And I've never seen PHP layed out like this: <?php function swapGreater(&$first, &$second){ $first = abs($first); $second = abs($second); ## list($first, $second) = $first > $second ? array($second, $first) : array($first, $second); } ?> Specifically the line with the two hashes... Is there somewhere I can read on how to do this? It looks like a really good and solid way of doing things.... -- Nathan Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233782 Share on other sites More sharing options...
boo_lolly Posted April 20, 2007 Author Share Posted April 20, 2007 to explain your first question: <?php $var += 5; //is the same as... $var = $var + 5; $var -= 2; //is the same as... $var = $var - 2; //same goes for '*' and '/' ?> make sense? and as for the hashed out line you posted. it's just another way of doing an if/else statement. so these: <?php $first < $second ? do_something : do_something_else; ($first < $second) ? (do_something) : (do_something_else); (($first < $second) ? (do_something) : (do_something_else)); ?> are all exactly the same as this: <?php if($first < $second){ do_something; }else{ do_something_else; } ?> there is no difference. Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233791 Share on other sites More sharing options...
Moon-Man.net Posted April 20, 2007 Share Posted April 20, 2007 Awesome, Thanks mate! That's really handy, I've just never seen it layed out like that. Its a lot simpler to write. But a little more complicated to read. But I guess if you know what your doing its ok and nice and neat I'll let this thread get back to its original question. Sorry for hijacking Thanks again.. -- Nathan Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233792 Share on other sites More sharing options...
dwees Posted April 20, 2007 Share Posted April 20, 2007 Try this: $var1 = ($var1 <= $var2) ? $var1 : $var2; $var2 = ($var2 > $var1) ? $var2 : $var1; Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233837 Share on other sites More sharing options...
Glyde Posted April 20, 2007 Share Posted April 20, 2007 that wasn't really what i was going for, but i '<' changed to '>' and it worked perfectly and i'm going to use it. hrere's the finished func: <?php function swapGreater(&$first, &$second){ $first = abs($first); $second = abs($second); list($first, $second) = $first > $second ? array($second, $first) : array($first, $second); } ?> btw i'm running PHP 4. to be honest i was look for something like: <?php if($first > $second){ $first -= $second; $second += $first; } ?> or something similar. i don't know how to do it but i've seen it done before. i was just trying to see if anyone can help me understand how to do that. also, thank you for illustrating what '&' does. i've seen it every now and then in front of variables but i had no idea why people used it or what it's purpose was. i can see now it allows you to store it in an array, right? thanks again bro. Actually & creates a reference to the original variable. Here's an example: <?php $var1 = "Some Text"; $var2 = &$var1; $var1 = "Some other text"; print $var2; ?> While most people not knowing what & meant would expect this to print Some Text, it actually prints Some other text, since $var2 is simply a pointer to $var1 Quote Link to comment https://forums.phpfreaks.com/topic/47843-solved-comparing-2-numbers-and-swapping-values-via-greaterless-than-value/#findComment-233989 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.