0

私のコードには、次のようなネストされた三項演算子があります。

$error = $fault_all ? "ALL" : $fault_twothirds ? "TWOTHIRDS" : $fault_onethird ? "ONETHIRD" : "UNKNOWN";
        echo 'STATEERROR: ' . $error . ';';

それらは私の好みの左から右の順にリストされているので、$fault_allと$fault_twothirdsがtrueの場合、「ALL」を$errorに割り当てたいと思います。それらすべてが真である場合も同じです。すべてがfalseの場合、「UNKNOWN」をエラーに割り当てる必要があります。

ただし、それらのいずれかが真の場合は「ONETHIRD」のみが返され、すべての偽の「UNKNOWN」が返されます。「ALL」と「TWOTHIRDS」を返品するにはどうすればよいですか?

4

3 に答える 3

2

(andを使用)して、異なる三項を互いに分離するか、if/else 句を使用することをお勧めします。

于 2012-04-16T11:45:51.200 に答える
1

状態のリストをデバッグおよび管理できるという点では、判読できない 3 項の使用を停止し、スイッチ、if-elseif ステートメント、または長いリストが予想される場合は次のようなアプローチを使用することをお勧めします。次のとおりです。

<?php
function state( $states ) {
    foreach( $states as $state => $current ) {
        if( $current ) {
            return $state;
        }
    }
    return 'UNKNOWN';
}

$states = array(
    'ALL' => $fault_all,
    'TWOTHIRDS' => $fault_twothirds,
    'ONETHIRD' => $fault_onethird
);

var_dump( state( $states ) );

とはいえ、これはうまくいくはずです。

<?php
$error = ( $fault_all ? "ALL" : ( $fault_twothirds ? "TWOTHIRDS" : ( $fault_onethird ? "ONETHIRD"  : "UNKNOWN" ) ) );
于 2012-04-16T11:56:09.050 に答える
1

これは既知の問題です。--ヴィークン

たとえば、次のネストされた三項...

<?php 
$arg = 'T';
$vehicle = ( ( $arg == 'B' ) ? 'bus' :
           ( $arg == 'A' ) ? 'airplane' :
           ( $arg == 'T' ) ? 'train' :
           ( $arg == 'C' ) ? 'car' :
           ( $arg == 'H' ) ? 'horse' :
           'feet' );
echo $vehicle; 

版画'horse'

@berry-langerakが述べたように、制御フロー関数を使用します...

オブジェクト{配列、構造}を使用すると、はるかに信頼性が高くなります... IE

$vehicle = (empty( $vehicle) ?

    array(

    'B' => 'Bus',
    'A' => 'Airplane',
    'T' => 'Train',
    'C' => 'Car',
    'H' => 'Horse',

    ):

    NULL
 );

 $arg = 'T';

 $vehicle = (! empty($arg) ? $vehicle[$arg] : "You have to define a vehicle type");

 echo($vehicle);
于 2012-10-05T15:08:16.067 に答える