0

このコードがなぜあるのか混乱しています:

$mapped_class = ( $mapped_field_index = array_search( $field_name, $automapped_header ) !== false ) ? " mapped mapped_to-" . $mapped_field_index : "";

...一貫して(該当する場合)1として返されます$mapped_field_index

これに対して、拡張コード:

$mapped_field_index = array_search( $field_name, $automapped_header );
$mapped_class = $mapped_field_index !== false ? " mapped mapped_to-" . $mapped_field_index : "";

...正しい検索インデックスを。として表示します$mapped_field_index

PHPでは、IFコンテキスト内の割り当ても式として評価され、割り当てられた値を返すと思いました。結果が得られない$mapped_class状況ではが空白であるため、これはこれらの両方の例に当てはまるようです。array_search()

しかし、どちらの場合も、 (実際のインデックスではなくTRUEを示しているように見える)三部形式ではなく$mapped_field_index、正しいarray_search()インデックスが含まれていることを期待していました。1

三項演算子はここで貢献効果がありますか?

4

2 に答える 2

1

$mapped_field_index2つのケースで同じ値に設定されていません。最初の例で$mapped_field_indexは、はの結果に等しい

array_search( $field_name, $automapped_header ) !== false

2番目の例では、

array_search( $field_name, $automapped_header )

2番目の例を変更して、最初の行が次のようになるようにした場合:

$mapped_field_index = array_search( $field_name, $automapped_header ) !== false;

その場合も常に1を取得します。

効率に違いがないこのような場合は、より言葉が多いが、とにかくより読みやすい構文を使用したほうがよいでしょう。

于 2012-11-30T18:44:36.953 に答える
0

比較演算子は、割り当てよりも優先されます。http://php.net/manual/en/language.operators.precedence.phpを参照してください

(あなたの!==句はあなたの=句の前にグループ化されています)

このように括弧を追加してみてください(100%確実に機能するかどうかはわかりませんが、機能する可能性があります)

$mapped_class = ( ($mapped_field_index = array_search( $field_name, $automapped_header )) !== false ) ? " mapped mapped_to-" . $mapped_field_index : "";
于 2012-11-30T18:24:15.997 に答える