Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ternary operator on javascript and PHP, different output

I wanted to do Fizzbuzz in php by using unary if, but the output is not what I expect, and I didn't understood why, so I have copy-paste the code to javascript, and now the result is as expected. Why?

<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script>
$(function(){
papa ='Javascript Output: ';
for($i=1;$i <= 10; $i++){
papa += ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i;
$('#result').text(papa);
}
})
</script>
<?php
echo 'PHP Output: ';
for($i=1;$i <= 10; $i++){
$papa ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i;
echo $papa;
}
?>
<div id='result'></div>

Output

PHP Output: 12Buzz4BuzzBuzz78BuzzBuzz
Javascript Output: 12Fizz4BuzzFizz78FizzBuzz
like image 710
Jonathan de M. Avatar asked Jul 05 '26 14:07

Jonathan de M.


2 Answers

Ternary operator (which you called "unary if") in javascript uses right associativity and the same operator in php uses left associativity.

  • javascript operator precedence
  • php operator precedence

Yes, this could be fixed with more parenthesis (as well as any problem relating operator precedence).

like image 60
kirilloid Avatar answered Jul 07 '26 04:07

kirilloid


in PHP, change 
    ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i;
    to:
    ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : (($i % 5 === 0) ? 'Buzz' : $i);
like image 41
tuoxie007 Avatar answered Jul 07 '26 02:07

tuoxie007



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!