如果声明里面有php内容,包含html代码

<?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!

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.

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>"

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.