2014-12-01 3 views
0

나쁜 용어에 대한 사과는이 문제를 설명하는 데 적합한 단어를 생각할 수 없으므로이 예제는 더 많이 사용해야합니다.PHP 객체 변수에 같은 이름으로 액세스하고 있습니까?

저는 API 서버를 폴링하고 json_decode를 사용하여 PHP 객체로 변환 한 JSON 객체를 반환하고 있습니다.

XML 형식으로 반환 된 결과의 예는 여기에 있습니다 :이 결과에서 http://balifoodsafari.com.au/RGJ4QHE.xml

는 예약 - 아래 여러 필드 집합> 그것의 자신의 레이블과 값을 각 필드가 있습니다. 이 과정을 통해 처리해야하며 올바른 변수에 올바른 필드 값을 할당해야하며 API 서버를 폴링 할 때마다 필드가 동일한 순서로 유지된다는 보장을 할 수 없습니다.

foreach($decoded->booking->fields->field as $field){ 
    if($field->label == "Name of Hotel/Accommodation"){ 
     $hotelname = $field->value; 
    } 
    elseif(){repeat for 2nd field name} 
    elseif(){repeat for 3rd field name} 
    elseif(){repeat for 4th field name} 
} 

는 기본적으로, foreach는 필드가 일치하는 필드 레이블을 찾아 변수를 일치하는 일련의 검사를 실행 발견 : 내가 좋아하는 뭔가를 할 것이라고이 쓰고 있어요으로

내 생각. 이 작업을 수행하는 더 좋은 방법이 있습니까? 그리고/또는 위의 코드가 작동할까요?

답변

0

변수에 할당하는 대신 연결 배열을 사용하는 것이 어떻습니까?

$fieldNames = array(
    'Name of Hotel/Accommodation' => 'hotelname', 
    // ... 
); 

$fields = array(); 

foreach($decoded->booking->fields->field as $field){ 
    if (isset($fieldNames($field->label)) { 
     $fields[$fieldNames[$field->label]] = $field->value; 
    } 
} 

// $fields will be something like array('hotelname' => '...', ...); 
0

아마 컴파일러는 경우 문보다 스위치 문을 최적화 더 나은 때문에이

switch($field->label) { 
    case "fieldLabel1": 
     //First if cond 
     break; 
    case "fieldLabel2": 
     //2nd if cond 
     break; 
    case "fieldLabel3": 
     //third if cond 
     break; 
    case "fieldLabel4": 
     //fourth cond 
     break; 
    default: 
     //else cond 
} 

같은 스위치 케이스 문을 사용하는 것이 좋습니다. if-else 문의 경우 컴파일러는 if 문을 평가하는 순서가 중요한지 여부를 알지 못하므로 최적화를 수행 할 수 없습니다. 변수에 영향을주는 if 문에서 메소드를 호출 할 수 있습니다. switch 문을 사용하면 모든 절을 동시에 평가할 수 있으며 가장 효율적으로 순서를 지정할 수 있음을 알 수 있습니다.

+0

OP에 성능 문제가 있습니까? switch 문에 아무런 문제가 없지만, 여러분의 논증은 [조기 최적화] (http://c2.com/cgi/wiki?PrematureOptimization)와 매우 비슷하게 들립니다. –

관련 문제