PHPについてはよくわかりませんが、通常は数学のようで、角かっこは何よりも先に実行されます。
私はこれを持っています:
if( !strncmp($method_id,'OPTION', 6) && ( ($method_id != 'OPTION_5') || ($method_id != 'OPTION_12') ) )
unset( $available_methods[ $method_id ] );
ここで、は1から12に$method_id
等しいです。OPTION_
事実上、オプション5と12が使用可能な場合は、これら2つを除くすべての設定を解除します。
質問 上記が機能しないのはなぜですか。
編集
単純化してみましたが、わかりづらくなったと思います。
これは配送ループです。使用可能な方法は、、、、、、、、、および[出荷国内であり、国際ship:REGULAR_LOCAL
的であるship:EXPRESS_LOCAL
場合ship:PLAT_LOCAL
]です。ship:REGULAR_INT
ship:EXPRESS_INT
ship:PLAT_INT
FREE_SHIPPING
LOCAL
INT
注文が100ドルを超えると、FREE_SHIPPING
自動的に開始されますが、顧客の出身地に応じて、どちらかship:EXPRESS_LOCAL
またはプレゼントを用意したいと思います。ship:EXPRESS_INT
if( !strncmp($method_id,'ship:', 5) && ( ($method_id != 'ship:EXPRESS_LOCAL') || ($method_id != 'ship:EXPRESS_INT') ) )
unset( $available_methods[ $method_id ] );
FREE_SHIPPING
これは、、、またはのいずれかでship:EXPRESS_LOCAL
返さ れますship:EXPRESS_INT
。
ループ
if( isset( $available_methods['FREE_SHIPPING'] ) ) {
foreach( $available_methods as $method_id => $method ) {
if( !strncmp( $method_id, 'ship:', 5 ) && ( ($method_id != 'ship:EXPRESS_LOCAL') && ($method_id != 'ship:EXPRESS_INT') ) )
unset( $available_methods[ $method_id ] );
}
}
return $available_methods;