سؤال

كنت أتساءل عما إذا كان هناك شيء مثل ما يلي سيكون ممكنًا في PHP:

<?php echo "Hello {isset($name) ? $name : 'World'}!\n"; ?>

أو هل يجب علي فعل ما يلي؟

<?php echo "Hello " . ( isset($name) ? $name : 'World' ) . "!\n"; ?>

بشكل عام ، أفضل الاستبدال على التسلسل حيث أجد أن سلسلة التسلسل يمكن أن تجعل الأوتار أكثر صعوبة في القراءة من خلال جعلها طويلة للغاية.

سياق ذلك هو أنني أقرر الخيار في علامة تحديد يجب تحديده افتراضيًا استنادًا إلى استعلام قاعدة البيانات.

السياق الكامل:

<?php   
echo "
<form action='add_demographics.php' method='post'>
   <table>
      <input type=hidden name=userId value='{$_SESSION['username']}'/>
      <tr><td>User ID:</td><td>{$_SESSION['username']}</td></tr>";

foreach ($inputLabels as $i => $value)
{
    echo "
      <tr>
         <td>{$value['text']}</td>
         <td><select name=$i>";

    foreach ($value["options"] as $optionName => $optionValue)
    {
    echo "
            <option value=$optionValue {($result[$i]==$optionValue ? ' selected=true' : '')}>$optionValue</option>";
    }
    echo "
          </select></td>
      </tr>";
}

echo "
      <tr><td><input type='submit' name='submit' value='Submit' /></td></tr>
   </table>
</form>";
?>
هل كانت مفيدة؟

المحلول

يمكنك أن تفعل شيئًا كهذا:

$default = "World";
$name = "Dunes";
echo "Hello {${isset($name) ? 'name' : 'default'}}";

التحديث من Webbiedave:

"لا تفعل ذلك أبدًا لأنه من الممارسات الترميز الفظيعة تمامًا استخدام المشغل الثلاثي للإشارة إلى متغير متغير بعيدًا عن التسلسل!

نصائح أخرى

كلا ، لا يمكن أن تفعل ذلك. تحتاج إلى القيام بذلك خارج السلسلة والتسلسل. الشيء الوحيد الذي سيفعله PHP داخل السلسلة هو البحث عن وتقييم $ $ var (بدون تعبيرات) - إذا كنت تستخدم علامات اقتباس مزدوجة أو HeredOC المكافئة (لا تقوم PHP بتقييم VARS في عروض أسعار واحدة)

لا ، ليس من الممكن القيام بذلك بالطريقة التي تسأل عنها.

ومع ذلك ، يمكن أن يكون حل لمشكلتك المحددة هو تعيين متغير في الجزء العلوي من حلقة foreach للاحتفاظ بما إذا كان ينبغي تحديد هذا الخيار أم لا ، ثم صدى هذا المتغير كجزء من الإخراج الخاص بك:

foreach ($value["options"] as $optionName => $optionValue)
{
    $selected = $result[$i] == $optionValue ? "selected='selected'" : "";
    echo "
        <option value=$optionValue $selected>$optionValue</option>";
}
<?
    function is($var,$sub){
      return isset($var)?$var:$sub;
    }

    echo 'Hello, '.is($name,'World').'!\r\n';

    $name = 'Bob';

    echo 'Hello, '.is($name,'World').'!\r\n';
?>

ربما لراهن القلق؟

بالنظر إلى ما تريد القيام به. أريد أن أقول

$string = isset($name) ? $name : 'World';
$result = "Hello $string!\n";
echo $result;

ليس مطلوبًا فعليًا.
تعلم استخدام القوالب. يجب أن يكون HTML HTML ، وليس بعض البيانات المجردة المتشددين في PHP

<form action='add_demographics.php' method='post'>
   <table>
      <input type=hidden name=userId value='<?=_h($_SESSION['username'])?>'/>
      <tr><td>User ID:</td><td><?=_h($_SESSION['username'])?></td></tr>
<? foreach ($inputLabels as $i => $value): ?>
      <tr>
         <td><?=_h($value['text'])?></td>
         <td><select name="<?=$i?>">
<?   foreach ($value["options"] as $optionName => $optionValue): ?>
            <option value="<?=$optionValue?>" <? if ($result[$i]==$optionValue): ?> selected=true<? endif ?>>
              <?=$optionValue?>
            </option>
<?   endforeach ?>
          </select></td>
      </tr>
<? endforeach ?>
      <tr><td><input type='submit' name='submit' value='Submit' /></td></tr>
   </table>
</form>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top