2012-12-04 2 views
1

그래서 codeigniter를 사용하고 있습니다.PHP Codeigniter, 배열 기본값을 설정해야하거나 .. else 문을 반복적으로 사용해야합니다.

코드 재사용을 허용하기 위해 모델에는 여러 가지 기능이 있습니다.

예컨대 get_details, get_features, get_products

그때 모든 메소드를 호출 get_all라는 함수를, 그래서 내가 원하는 경우 내가 그들 모두를 얻을 수 있지만, 그렇지 않으면 내가 개별적으로 사용할 수 있습니다.

그래서 내 데이터가 있고 내보기로 전달합니다. 내보기는 각 식당을 반복하며 테이블 행에 다양한 데이터를 표시합니다.

현재로서는 값이 비어 있는지 식별하기 위해 if ... else 문을 사용합니다. 시설이 그것의 기능은 아직 추가했다하지 않은 경우 그래서 내가 사용

어쨌든
if(!empty($features['feature1'])){//DO STUFF e.g output 'YES'} 

, 내보기 코드에는 오히려 길고 복잡해지고 없습니다 기본적으로 각 각 배열의 모든 키에 대한 내가 사용하고 get_all 사용하여 반환하기 때문에 if..else 문은 설정되지 않은 경우 "-"를 출력합니다.

그것은 효과가 있습니다.

내가 생각한 해결 방법은 기본적으로 모든 것이 기본적으로 "-"로 설정된 기본 배열을 설정하는 것입니다. 그런 다음 데이터가 존재한다면 덮어 씁니다. 그런 다음 큰 기본값을 작성/초기화해야합니다. 배열 ..

그래서 내 질문은 생명을 위협하는 것이 아니며 특히 어렵다. 나는 못생긴 코드가없는 그러한 기능을 어떻게 달성하는지 간단하게 궁금해한다.

건배

답변

1

어쩌면 당신은 -에 그 빈 값을 설정하여, 컨트롤러의 배열을 "조정"할 수 있습니다

$features = array_map(function($value) { 
    return empty($value) ? '-' : $value; 
}, $features); 
0

당신이 당신의 실제 코드를 게시하지 않고 난 단지 몇 가지 일반적인 조언을 제공 할 수 있습니다. 일반적으로 이것을 처리하고 코드를 통합하여 모든 조건문을 제거하면 키가 배열에 배치됩니다.

$keys_to_check = array('feature1', 'feature2', 'etc.....'); 

foreach ($keys_to_check as $key) { 
    if (!empty($features[$key])) { 
    // do something 
    }  
} 

이렇게하면 모든 조건문을 더 정비 할 수있는 형태로 리팩터링합니다.

또한 3 subfunctions를 호출하는 일반 함수 get_all을 제공 할 때 불필요한 쿼리가 실행되지 않도록하는 것이 매우 중요합니다. 자신을 반복하지 않고 3 개의 기능을 1로 그룹화하는 것이 좋은 소프트웨어 디자인 인 것처럼 보이지만,이 세 가지 기능이 각각 비슷한 쿼리를 실행하는 경우 성능면에서 끔찍한 것입니다.

관련 문제