2013-08-23 2 views
0

메신저 선택한 국가가 특정 곱셈과 일치하면 합계에 곱셈을 추가하려면 다음 if 문을 사용합니다. 일부 국가가 선택 되었더라도 모든 명령문이 처리됩니다 1 백만 유로 선적으로 끝난다.문장이 모두 일치하지 않는 경우에도 처리 중일 경우

어떤 아이디어가 잘못 되었나요? 여기

if($address['country_id']== '96' or '125') 
{ 
    $shipp_cost=$shipp_cost * 1; 
} 

에서, 조건이 TRUE 항상을 평가합니다 :

if($address['country_id']== '96' or '125') 
    { 
    $shipp_cost=$shipp_cost * 1; 
    } 
if($address['country_id']== '162') 
    { 
    $shipp_cost=$shipp_cost * 1.6; 
    } 
if($address['country_id']=='133' or '129' or '17' or '230' or '18' or '146' or '168' or '130' or '188' or '184' or '206' or '209' or '44' or '149' or '26' or '100' or '32' or '196' or '107' or '116' or '114' or '113' or '221' or '61' or '57' or '99' or '173') 
    { 
    $shipp_cost=$shipp_cost * 1.67; 
    } 
if($address['country_id']=='169' or '13' or '228' or '46' or '118' or '55' or '45' or '158' or '108') 
    { 
    $shipp_cost=$shipp_cost * 1.8; 
    } 
if($address['country_id']=='14' or '195' or '201' or '16' or '29' or '223' or '25' or '224' or '31' or '8' or '211' or '5' or '50' or '205' or '27' or '222' or '234' or '204' or '56' or '122' or '159' or '87' or '88' or '170' or '132' or '94' or '97' or '139' or '161' or '163' or '124' or '121' or '142' or '182' or '189' or '70' or '68' or '194' or '71' or '134' or '150' or '84' or '157' or '66') 
    { 
    $shipp_cost=$shipp_cost * 2; 
    } 
if($address['country_id']=='38' or '190' or '215' or '214' or '136' or '63' or '213' or '212' or '199' or '191' or '72' or '203' or '144' or   '53' or '83' or '160' or '218' or '11' or '171' or '21' or '20' or '227' or '111' or '110' or '172' or '24' or '101' or '126' or '103' or '104' or '232' or '33') 
    { 
    $shipp_cost=$shipp_cost * 2.2; 
    } 
if($address['country_id']=='2' or '98' or '102' or '105' or '219' or '220' or '175' or '60' or '92' or '81' or '77' or '198' or '74' or '73' or '202' or '165' or '140' or '141' or '233' or '138' or '235' or '137' or '148' or '152' or '231') 
    { 
    $shipp_cost=$shipp_cost * 2.4; 
    } 
if($address['country_id']=='151' or '7' or '65' or '4' or '19' or '135' or '131' or '22' or '23' or '28' or '64' or '1' or '119' or '120' or '115' or '40' or '3' or '208' or '217' or '181' or '186' or '176' or '216' or '229' or '193' or '155' or '156') 
    { 
    $shipp_cost=$shipp_cost * 2.6; 
    } 
if($address['country_id']=='153' or '154' or '147' or '80' or '183' or '93' or '90' or '86' or '15' or '164' or '180' or '109' or '185' or '76' or '41' or '39' or '35' or '178' or '30' or '26' or '225' or '9' or '207' or '51' or '58' or '59' or '69' or '82' or '47' or '210' or '42') 
    { 
    $shipp_cost=$shipp_cost * 2.8; 
    } 
if($address['country_id']=='95' or '37' or '239' or '117' or '123' or '238' or '145' or '34' or '226' or '106' or '143' or '43' or '62' or '52' or '85' or '67' or '200' or '179' or '91' or '192' or '78') 
    { 
    $shipp_cost=$shipp_cost * 3; 
    } 
if($address['country_id']=='75' or '127' or '48' or '128' or '10' or '197') 
    { 
    $shipp_cost=$shipp_cost * 3.2; 
    } 
if($address['country_id']=='187') 
    { 
    $shipp_cost=$shipp_cost * 3.4; 
    } 
if($geo_zone=='166' or '174') 
    { 
    $shipp_cost=$shipp_cost * 3.6; 
    } 
if($geo_zone=='54') 
    { 
    $shipp_cost=$shipp_cost * 3.8; 
    } 
if($geo_zone=='12') 
    { 
    $shipp_cost=$shipp_cost * 4.8; 
    } 
if($geo_zone=='6' or '79' or '89' or '167' or '177' or '49') 
    { 
    $shipp_cost=$shipp_cost * 6; 
    } 
+1

배열을 만들고 in_array를 사용하십시오. –

답변

3

귀하의 if 문은 당신이 그것을 기대하지 않습니다.

당신은 대신 다음이 필요합니다 in_array를 사용하여, 그러나

if($address['country_id'] == '96' or $address['country_id'] == '125') 
{ 
$shipp_cost = $shipp_cost * 1; 
} 

는 많은 요소에 대해이 작업을 확인해야하는 경우 훨씬 더 : 배열

저장 번호, 및

$arr = array('133','129','17','230','18','146','168','130','188','184','206','209','44','149','26','100','32','196','107','116','114','113','221','61','57','99','173'); 

if (in_array($address['country_id'], $arr)) { 
    //YAY 
} 

: 지정된 요소가 정의 된 배열에있는 경우 다음 확인하려면 다음을 사용

관련없는 sidenote로이 경우 elseif 문을 사용하는 것이 더 좋을 것이라고 생각합니다. 그 이름에서 알 수 있듯이

elseififelse의 조합입니다. 다른 경우와 마찬가지로 원래 if 표현식이 FALSE으로 평가되는 경우 다른 문을 실행하기 위해 if 문을 확장합니다. 그러나 else과 달리 elseif 조건부 표현이 TRUE으로 평가되는 경우에만 대체 표현식이 실행됩니다. 같은

뭔가 : TRUE로 평가

if(condition) {  
    //code  
} 

elseif (condition) { 
    //code 
} 

elseif (condition) { 
    //code 
} 

... 

첫 번째 ELSEIF 표현 (있는 경우)가 실행된다. 그러면 모든 if 문이 실행되지 않을 수 있습니다.

희망이 도움이됩니다.

+0

오, 큰 감사가 배열과 함께 노력하고 있었지만 지금은 잘 작동하지 않습니다. 모든 통찰력을 위해 매우 감사합니다 :) – user2393339

+0

@ user2393339 : 당신은 환영합니다 :) –

1

당신은 다음과 같이 사용한다 :

if($address['country_id']== '96' or $address['country_id'] == '125') { 
    $shipp_cost=$shipp_cost * 1; 
} elseif($address['country_id']== '162') { 
    $shipp_cost=$shipp_cost * 1.6; 
} elseif(...) { 
... 

대안 switch case

switch($address['country_id']) 
{ 
    case 96: 
    case 125: 
     $shipp_cost=$shipp_cost * 1; 
     break; 
    case 162: 
     $shipp_cost=$shipp_cost * 1.6; 
} 
0

당신이 시도해야 좀 봐 ... 당신의 문제가

if($address['country_id']== '96' or '125') 
    { 
    $shipp_cost=$shipp_cost * 1; 
    } 
elseif($address['country_id']== '162') 
    { 
    $shipp_cost=$shipp_cost * 1.6; 
    } 
elseif($address['country_id']=='133' or '129' or '17' or '230' or '18' or '146' or '168' or '130' or '188' or '184' or '206' or '209' or '44' or '149' or '26' or '100' or '32' or '196' or '107' or '116' or '114' or '113' or '221' or '61' or '57' or '99' or '173') 
    { 
    $shipp_cost=$shipp_cost * 1.67; 
    } 
elseif($address['country_id']=='169' or '13' or '228' or '46' or '118' or '55' or '45' or '158' or '108') 
    { 
    $shipp_cost=$shipp_cost * 1.8; 
    } 
elseif($address['country_id']=='14' or '195' or '201' or '16' or '29' or '223' or '25' or '224' or '31' or '8' or '211' or '5' or '50' or '205' or '27' or '222' or '234' or '204' or '56' or '122' or '159' or '87' or '88' or '170' or '132' or '94' or '97' or '139' or '161' or '163' or '124' or '121' or '142' or '182' or '189' or '70' or '68' or '194' or '71' or '134' or '150' or '84' or '157' or '66') 
    { 
    $shipp_cost=$shipp_cost * 2; 
    } 
elseif($address['country_id']=='38' or '190' or '215' or '214' or '136' or '63' or '213' or '212' or '199' or '191' or '72' or '203' or '144' or   '53' or '83' or '160' or '218' or '11' or '171' or '21' or '20' or '227' or '111' or '110' or '172' or '24' or '101' or '126' or '103' or '104' or '232' or '33') 
    { 
    $shipp_cost=$shipp_cost * 2.2; 
    } 
elseif($address['country_id']=='2' or '98' or '102' or '105' or '219' or '220' or '175' or '60' or '92' or '81' or '77' or '198' or '74' or '73' or '202' or '165' or '140' or '141' or '233' or '138' or '235' or '137' or '148' or '152' or '231') 
    { 
    $shipp_cost=$shipp_cost * 2.4; 
    } 
elseif($address['country_id']=='151' or '7' or '65' or '4' or '19' or '135' or '131' or '22' or '23' or '28' or '64' or '1' or '119' or '120' or '115' or '40' or '3' or '208' or '217' or '181' or '186' or '176' or '216' or '229' or '193' or '155' or '156') 
    { 
    $shipp_cost=$shipp_cost * 2.6; 
    } 
elseif($address['country_id']=='153' or '154' or '147' or '80' or '183' or '93' or '90' or '86' or '15' or '164' or '180' or '109' or '185' or '76' or '41' or '39' or '35' or '178' or '30' or '26' or '225' or '9' or '207' or '51' or '58' or '59' or '69' or '82' or '47' or '210' or '42') 
    { 
    $shipp_cost=$shipp_cost * 2.8; 
    } 
elseif($address['country_id']=='95' or '37' or '239' or '117' or '123' or '238' or '145' or '34' or '226' or '106' or '143' or '43' or '62' or '52' or '85' or '67' or '200' or '179' or '91' or '192' or '78') 
    { 
    $shipp_cost=$shipp_cost * 3; 
    } 
elseif($address['country_id']=='75' or '127' or '48' or '128' or '10' or '197') 
    { 
    $shipp_cost=$shipp_cost * 3.2; 
    } 
elseif($address['country_id']=='187') 
    { 
    $shipp_cost=$shipp_cost * 3.4; 
    } 
elseif($geo_zone=='166' or '174') 
    { 
    $shipp_cost=$shipp_cost * 3.6; 
    } 
elseif($geo_zone=='54') 
    { 
    $shipp_cost=$shipp_cost * 3.8; 
    } 
elseif($geo_zone=='12') 
    { 
    $shipp_cost=$shipp_cost * 4.8; 
    } 
elseif($geo_zone=='6' or '79' or '89' or '167' or '177' or '49') 
    { 
    $shipp_cost=$shipp_cost * 6; 
    } 
0

, 당신은 if($address['country_id']== '96' or '125')($address['country_id']== '96') OR ($address['country_id']== '125')을 테스트 할 것이라 생각합니다.

아니에요. , if(($address['country_id'] == '96') or ('125')), 두번째 괄호, 즉 ('125')true를 해결하고, 따라서 각 if 상태 평가 : ==OR이보다 높은 우선 순위를 갖는다
때문에 이런 일을 해결한다.

'높은 우선 순위'는 우선 순위가 낮은 것보다 더 긴밀하게 연산자를 바인딩한다는 의미입니다.
Here은 참조 용 PHP 연산자 우선 순위 표입니다.

관련 문제