check compound condition using OR and AND in php - php

I want to check the condition either of one among $flag1==1 or $flag2==2 or $flag3==3 along with that $flag4 == 4 is true then I want to execute a statement.This is not working in php.I tried:
if (($flag1==1 or $flag2 == 2 or $flag3 ==3) and $flag == 4)
{
$variable1 ='Change in Asset and Transformation Approach';
echo $variable1;
}

I think your problem is a typo. You mentioned you wanted $flag4 to equal 4. But you are checking the value of $flag.
if (($flag1 == 1 or $flag2 == 2 or $flag3 ==3) and $flag4 == 4) { // <-- notice $flag4
$variable1 ='Change in Asset and Transformation Approach';
echo $variable1;
}
Working Codepad.

Related

OR statement returning wrong number

If i put 1 or 2 into this it will return 4. Why is this?I'm more used to python stuff so sorry if this is rather basic.
e = 1;
f=0;
if(e==1){f=1;}
if(e==2){f=2;}
if(e== 3 or 4){f=4;}
echo f;
Try replacing :
if(e== 3 or 4){f=4;}
with
if(e == 3 or e == 4){ f=4; }
The value 4 is considered to be TRUE by the language. In your code, 1 == 3 is FALSE, so the if statement is looking at (FALSE or TRUE) which is equals TRUE, so f is set to 4.
Have a look at this link re: PHP Booleans
For your or statement, this is what you want:
if ( ($e == 3) || ($e == 4) ) {
$f=4;
}
The next statement is always going to be true
if(e== 3 or 4)
If you take a look at booleans, you'll see that pretty much everything is equals to true in php (except for those values stated in that same page). So what you really have is something like this:
if($e==3 or true)
And since anything or true is always true, you get that (weird, but not unexpected) result.
In case you want to check if $e is equals to 3 or 4, do it like so:
if($e==3 || $e==4){
Note that since these are not if..else statements, every condition is being checked. Take a look at the expanded version:
if($e==1){
$f=1;
}
if($e==2){
$f=2;
}
if($e==3 or 4){
$f=4;
}
This /\ is different from
if($e==1){
$f=1;
}elseif($e==2){
$f=2;
}elseif($e==3 or 4){
$f=4;
}
Since the latter only checks every condition in case none of the previous fit.
Another side note.. since you like python, that code could be converted into this single line:
$f = ($e==3 || $e==4) ? 4 : $e;

PHP if statement display always the same

Short question what am I doing wrong?
<?php
if ($arrItem['text']['kachelband_de_external_link'] = "1"){
echo 'target="_blank"';
} else{
}
?>
I always get the output: target="_blank", even if "$arrItem['text']['kachelband_de_external_link']" = 0
Because you are doing an assignment operation instead of comparison on your if statement.
Should be
if ($arrItem['text']['kachelband_de_external_link'] == "1")
See the two equal signs ?
if ($arrItem['text']['kachelband_de_external_link'] == "1"){
echo 'target="_blank"';
}
use == to check conditions
You have to use
if ($arrItem['text']['kachelband_de_external_link'] == "1")
and not only one of "=". If you only use one, you set the var before. By using 2 "=" you compare ;)

What is the difference between if checks at same time and if checks after at least one if check was passed?

Can someone of you explain me in which case I should do all if-checks at the same time or make if-checks in a if-check?
When should I do it like in example 1 and when should I do it like in example 2?
example 1:
if ($var1 == condition && $var1 =! ...) // all checks at the same time
{
...
}
example 2:
if ($var1 == condition) // if-check in a if-check
{
if ($var1 != ...)
{
...
}
}
Thanks for your help!
Using a single if check for multiple conditions allows the following:
An event when both conditions are met
An event when neither condition is met
However using an 'if check within an if check' allows the following:
An event when one condition is met and the other isn't
An event when both conditions are met
An event when neither condition is met
Using an 'if check within an if check' allows more flexibility. However, if you only want something to happen if both conditions are met, the first one will suffice.
Example for a single check
$var1 = 1
$var2 = 2
if($var1 == 1 && $var2 == 2){
//code for when var1 is 1 and var2 is 2
}
else{
//code for when either var1 is not 1 or var2 is not 2
}
Example for nested checks
if($var1 == 1){
if($var2 == 2){
//Code for when var1 is 1 and var2 is 2
}
else{
//code for when var 1 is 1 and var2 is not 2
}
else{
//Code for when var1 is not 1 (BUT var2 might be 2)
}

Check if numeric and compare value in conditional with &&?

In PHP, if there is a conditional like this:
if ( is_numeric($my_var) && $my_var == 1 ) {
}
If the first part of the if is false, does the second part ($my_var == 1) get ever executed?
Thanks!
In your example the $my_var == 1 will not be executed (if it's not numeric). PHP will determinate that the first part evaluated to false and so there is no benefit in executing the second part because you are using the && AND operator.
An example:
if(isset($_GET['something']) && $_GET['something'] == '1')
{
}
If the querystring variable something is missing then it doesn't check if it equals 1. If it did then it could produce an Undefined index notice.
You can also verify this behavior with something like:
$test = '2';
if($test == '1' && die('dead'))
{
}
echo 'execution continues....';
Set $test = '2' and the die() will not stop execution. Set it to 1 and the die will execute and stop, thus you won't see Execution continues...
Edit: there is some general information here (not PHP specific).
If the first condition is false second one will not be executed if you use &&. You can try it yourself:
function a(){
echo 'a';
return true;
}
function b(){
echo 'b';
return true;
}
if (a() && b())
{
//do something
}
This will output: ab.
function a(){
echo 'a';
return false;
}
function b(){
echo 'b';
return true;
}
if (a() && b())
{
//do something
}
Outputs a.
I gave you this example because I couldn't find anything in docs but the first comment in this section
This is called a call-by-need or lazy evaluation.
Note: In some cases it's useful or necessary that the second function is executed despite of the state of first condition. In that cases you can use & operator. With bitwise operators you work with numbers, not with booleans. Because php interpretator should know both value before and after & operator it will execute both functions (a() & b()) and true, false are evaluated as 1 and 0, respectively, 1 & 0 => 0 that will be evaluated as false in if statement.
You can use like
if ( is_numeric($my_var)) {
if($my_var == 1)
{
// your code
}
}

Programmimg Logic

Am new to the world of coding and have difficulty is understanding the logic below. Appreciate it if someone could explain it to me. Let me start off with If statements.
/* Sample Code */
if($username == "123") {
//some code here;
}
if ($username == "abc") {
//some code here;
}
My understanding is that IF the first statement fails, progress to the second statement i.e. if $username does not equal to 123 then test whether it is abc. Is that correct?
Now, let me expand on that same code with else statements
/* Sample Code */
if($username == "123") {
//some code here;
}
if ($username == "abc") {
//some code here;
}
else {
//some code here;
}
My understanding is that IF the first staement FAILS i.e. $username does not equal to 123 then test the second statement. IF the second statement fails i.e. $username does not equal to abc then proceed to ELSE which is a catchall should all preceding IF statements FAIL. Is that correct?
Let me expand on that again using ELSE IF statements
/* Sample Code */
if($username == "123") {
//some code here;
}
else if ($username == "abc") {
//some code here;
}
else {
//some code here;
}
How is this code different from 2 separate if statements? What does ELSE do in the entire block of code?
the difference between:
if() {
}
else if() {
}
and
if() {
}
if() {
}
is that the second condition in the second example is always tested, regardless of the first if condition. In the first example, the second clause only executes if the first clause is false.
In your example, since "123" is never equal to "abc", they are equivalent. In real life, the ifs don't need to be related:
if (a) {
// Do something
} else if (b) {
// Do something else
} else {
// Do something else
}
is different from
if (a) {
// Do something
}
if (b) {
// Do something else
} else {
// Do something else
}
In the second case, both a and b might be true, in which case both lines will fire. In the first case, only the first line will fire, since the else will never even be read.
In this case they are the same:
if($username == "123") {
//some code here;
}
if ($username == "abc") {
//some code here;
}
against
if($username == "123") {
//some code here;
}
else if ($username == "abc") {
//some code here;
}
The difference is that with else if if the first case is true the second case will never fire.
e.g.
if($username == "123") {
//some code here;
$username = "abc"
}
if ($username == "abc") {
//some code here;
}
Both code if statement code blocks will be executed where as in:
if($username == "123") {
//some code here;
$username = "abc"
}
else if ($username == "abc") {
//some code here;
}
only the first if statement code block will be executed.
You aren't right, here's how it works:
if($something == "something")
{
//code
}
if($something == "somethingelse")
{
//code
}
Both of the above will be tested regardless of what $something equals, because they are two separate if statements. So if you were to do:
$something = "something";
if($something == "something")
{
echo $something;
}
$something = "somethingelse";
if($something == "somethingelse")
{
echo $something;
}
then the output would be "somethingsomethingelse" because both are tested. Note that in an if/elseif/else structure, it would be a syntax error to put a line of code between the ending of one block and the beginning of another.
if($something == "something")
{
//code
}
else
{
//code
}
In this, the first statement will be tested, if it is true, then it will run through that code. If false, then the code in the else block will occur.
if($something == "something")
{
//code
}
elseif($something == "somethingelse")
{
//code
}
else
{
//code
}
In this it would check the first if statement, if true, then that code runs. If false, it checks the elseif statement, if true it runs that. If false it runs the else block. The else block is a catch all.
So in something like:
if(false)
{
//code
}
elseif(false)
{
//code
}
else
{
//code
}
the else block will always be run.
The same sort of thing occurs in multiconditional statements such as:
if(is_string($something) && $something == "something")
if is_string($something) is false, it won't check the second condition because they both must be true when AND is used, and if is_string($something) is true and $something == "something" is false, then the entire if condition is false, yet again because they both must be true.
if($something == "something" || $something == "somethingelse")
In this OR statement, it will check both if the first is false, because one or the other must be true in order for the if statement to be true. So if $something does equal "somethingelse" then the if statement will be considered true. However, if $something does equal "something" then the second condition won't be checked, because it already got the true condition it needs to make the statement true.
So an && condition in an if condition is like doing:
if(is_string($something))
{
if($something == "something")
{
//code
}
}
and and || statement is like doing:
if($something == "something")
{
//code
}
elseif($something == "somethingelse")
{
//same code as previous if statement
}
Here is an example:
//this would be pulled from a page called like:
//http://www.domain.com/page.php?num=5&num2=10
$num = $_GET['num']; //5
$num2 = $_GET['num2']; //10
if(!is_numeric($num))
{
echo 'Number 1 is not a number, cannot continue <br />';
}
elseif(!is_numeric($num2))
{
echo 'Number 2 is not a number, cannot continue <br />';
}
else
{
if($num > $num2)
{
echo 'Number 1 is bigger than Number 2 <br />';
}
elseif($num2 > $num)
{
echo 'Number 2 is bigger than Number 1 <br />';
}
else
{
echo 'Numbers are equal <br />';
//Since if the numbers are neither greater than or less than each other, they must be equal to one another
}//end if
//% is the modulo operator, basically returns the remainder of division
//so !($num % $num2) is if the remainder of $num / $num2 == 0, I.E. NOT(!) $num % $num2
//! basically makes it take the opposite of the result, so !(0) is true, and 0 is false
//in the same way !(true) is literally NOT true (in other words false)
//and !(false) is literally NOT false (true)
if(!($num % $num2))
{
echo 'Number 1 is a multiple of Number 2 <br />';
}
else
{
echo 'Number 1 is not a multiple of Number 2 <br />';
}//end if
if(!($num2 % $num))
{
echo 'Number 2 is a multiple of Number 1 <br />';
}
else
{
echo 'Number 2 is not a multiple of Number 1 <br />';
}//end if
echo 'The sum of the numbers is ' . $num + $num2;
}//end if
So, with this, and an input of num=5&num2=10, the output would be
Number 2 is bigger than Number 1
Number 1 is not a multiple of Number 2
Number 2 is a multiple of Number 1 //Note that both of the multiple conditions were tested, because they are separate
The sum of the numbers is 15
With this an an input of num=16&num2=3, the output would be:
Number 1 is bigger than Number 2
Number 1 is not a multiple of Number 2
Number 2 is not a multiple of Number 1
The sum of the numbers is 19
and with an input of num=16&num2=word, the only output would be
Number 2 is not a number, cannot continue
and with an input of num=4&num2=4 the output would be
Numbers are equal
Number 1 is a multiple of Number 2
Number 2 is a multiple of Number 1
The sum of the numbers is 8
My understanding is that IF the first
statement fails, progress to the
second statement i.e. if $username
does not equal to 123 then test
whether it is abc. Is that correct?
This isn't correct. Both expressions will be evaluated; however, at most one of them can be true. Your third example behaves the way you describe above.
In your second example, if $username == "123", then the block associated with the first if statement will execute; however, the "else" block associated with the second if statement will also execute.
In the first example, both "if" statements are executed. If both are true, both happen.
In your case, both can't be true, but that's no reason not to use "else". If nothing else [no pun intended], "else" will provide a semantic hint for future programmers that you're only expecting one of the two clauses to be true.
The only way for your statement:
IF the first statement fails, progress to the second statement
to be true is if the second statement was indeed in an "else" clause of the first statement.
Only in the last snippet does the code behave as you describe. When you have an if followed by a second if, both tests are performed. There is no symbiosis or relation in the code flow.
if(X1){
A;
}elseif(X2){
B;
}elseif(X3){
C;
}else{
D;
}
this means: if X1 evaulates to true then do A. If not look if X2 evaluates to true. if yes do B. if not look if X3 evaluates to true. if so do C. if not then just do D.
if(X1){
A;
}
if(X2){
B;
}
this means: if X1 evaluates to true do A. end of your first if. then another if comes: if X2 evaluates to true then do B. these two if statements are separated from eachother unlike my first example.
the alternative if syntax in php makes it a bit clearer:
My first example in alternative syntax:
if(X1):
A;
elseif(X2):
B;
elseif(X3):
C;
else:
D;
endif;
my second example:
if(X1):
A;
endif;
if(X2):
B;
endif;
here you see clearly that these two if statements are separated from eachother.

Categories