0

これから次のコードを変換したい

$diff = strtotime($row['start']) - strtotime($current);
if ($diff < 7200) {
    echo 'Starts soon';
} else if ($diff <= 0) {
    echo 'Started';
} else {
    echo 'Starts';
}

これに?

<?= ($current > $row['start']) ? 'Started' : 'Starts';  ?>

どうすれば(可能であれば)そのように書くことができますか?

4

4 に答える 4

2

あまり読みにくいので、使用しませんが、ここで説明します。

echo ($diff < 7200) ? 'Starts soon': (($diff <= 0) ? 'Started': 'Starts');
于 2012-07-26T12:11:40.210 に答える
0

if elseif数行をカバーするステートメントに問題はありません。これにより、後でコードをチェックする場合、またはさらに重要なことに、他の誰かがコードを読んでいる場合に、読みやすく、わかりやすく、何が起こっているかを簡単に確認できます。

覚えておいてください、コードを書くことは読むことよりも常に簡単です。

ドキュメントから:

<?php
// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true ? 'true' : false) ? 't' : 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>

読みにくく、誤読しやすいので、あまりお勧めできません。

于 2012-07-26T12:13:30.043 に答える
0

それは本当にきれいではありませんが、あなたはこのようにそれを行うことができます:

<?php
$diff = strtotime($row['start']) - strtotime($current);
echo ($diff < 7200 ? 'Start soon' : ($diff <= 0 ? 'Started' : 'Starts'));
?>

または

<?= ((strtotime($row['start']) - strtotime($current)) < 7200 ? 'Start soon' : ((strtotime($row['start']) - strtotime($current)) <= 0 ? 'Started' : 'Starts')); ?>
于 2012-07-26T12:11:24.653 に答える
0

elseifはelse部分に適用できます。新しいifを追加します。

<?= (($diff < 7200) ? "Starts soon" : (($diff <= 0) ? "Started" : "Starts")); ?>
于 2012-07-26T12:11:36.080 に答える