0
<?php

    $content = "

            <table style='text-align: center;'>
                <tr>
                    <td style='text-align: center;'>
                       ".$result->name."
                    </td>
                </tr>
            </table>

I have the above code, and I would like to know, if i can add an if statement inside style of 2nd td, so if ($result->name == ""){display: none;} .

Is there any way that this can happen ?

Notice that if name exists the above code will print the name, if not it will print an empty td .

Thanks in advance!

4
  • 1
    sure you can. Just break the concatenation, add an if that conditionally concatenates 'display:none;' and then concatenate the rest of the table Commented Jul 11, 2018 at 14:26
  • 4
    Ternary operator will help you. Commented Jul 11, 2018 at 14:27
  • 2
    Yes - you could a) use a ternary operator b) assign the class to a variable beforehand and include that in the echo c) break the $content var into bits and concatenate it with .= d) break it into bits with PHP template style syntax .... have I missed any? Commented Jul 11, 2018 at 14:27
  • if I break the concatenation, should then use a variable inside if statement including display: none and add it to next .= ? Commented Jul 11, 2018 at 14:30

3 Answers 3

3

Here's a few ways you can do it:

1: Use a Ternary Operator

<?php
$content = "

    <table style='text-align: center;'>
        <tr>
            <td style='text-align: center;" . ($result->name ? " display: none;" : "") . "'>
                {$result->name}
            </td>
        </tr>
    </table>
";


2: Assign the CSS to a variable and interpolate it

<?php
$css = $result->name ? " display: none;" : "";
$content = "

    <table style='text-align: center;'>
        <tr>
            <td style='text-align: center;{$css}'>
                {$result->name}
            </td>
        </tr>
    </table>
";


3: Break the $content variable assignment into bits so you can use an if() condition

<?php
$content = "

    <table style='text-align: center;'>
        <tr>
            <td style='text-align: center;";

if($result->name) $content .= " display: none;";

$content .= "'>
                {$result->name}
            </td>
        </tr>
    </table>
";


4: Use PHP's template style syntax

<table style='text-align: center;'>
    <tr>
        <td style='text-align: center;<?php if($result->name): ?> display: none;<?php endif; ?>'>
            <?= $result->name; ?>
        </td>
    </tr>
</table>

This is my preferred option if you're working in a template (a .phtml file for example).


5: ... or mix it up a bit (template style with a ternary echo)

<table style='text-align: center;'>
    <tr>
        <td style='text-align: center;<?= $result->name ? " display: none;" : ""; ?>'>
            <?= $result->name; ?>
        </td>
    </tr>
</table>


Ultimately it comes down to which you find most readable and are most comfortable with.

Sign up to request clarification or add additional context in comments.

6 Comments

Ugh, curly braces. ;) But yes, this covers them all.
@IncredibleHat - heh sorry, I try to limit them to only iddy biddy bits when interpolating variables, I promise :)
I prefer fourth answer as well, but im going with the Ternary Operator!
You'd be amazed how you end up using them all... for all kinds of situations. Especially when dealing with any old code you are stumbling over lol.
I just used the first one and i have a syntax error " Syntax error, unexpected '?', expecting... "
|
2

Sure, use the ternary operator...

$content = "<table style='text-align: center;'>
               <tr>
                   <td style='text-align: center;" . ($result->name == 'Foo Bar' ? ' display:none;' : '') . "'>
                      ".$result->name."
                   </td>
               </tr>
           </table>"

3 Comments

David Walsh has a great article on it... davidwalsh.name/php-shorthand-if-else-ternary-operators
It seems that this works but my question is, should I replace $condition with $result->name, since the $result->name 's value is the one that determines if the td should be displayed or not ?
Sure. I've updated the answer for you. Just set your condition to match whatever you are checking for.
1

You sure can! This is a perfect opportunity to use a ternary statement. Let me explain.

A ternary statement looks like this:

<?php
$condition = true;
$content = 'Condition is ' . ( ($condition === true) ? 'met' : 'not met' ) . 'and some more text'; 
// Outputs 'Condition is met and some more text' because condition is true
?>

Essentially it allows you to write inline conditional statements. Sometimes they're not very readable, but sometimes they in fact make the surrounding code more readable.

1 Comment

Here's the PHP docs on the subject of ternary operators

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.