2017-05-23 4 views
1

내가 최대 $ stringfilter50정리 매우 긴 문장

내가 다른 문자열 $ reporteremail이 내가 조건문 이에을 만들고 싶어에서 $ stringfilter1 $ stringfilter2 등 모든 방법라는 문자열의 아주 긴 목록이있는 경우 $ reporteremail에 $ stringfilter 문자열이 있으면 일부 코드가 실행됩니다. 그 순간 내 코드는 다음과 같이 나타납니다.

if (stripos($reporteremail, $stringfilter1) !== false || stripos($reporteremail, $stringfilter2) !== false || stripos($reporteremail, $stringfilter3) !== false [...]) { 
     runcode(); 
} 

이것은 매우 길지만. 나는 여기 그것을 짧게 자른다.

더 깨끗하고 효율적인 방법이 있는지 궁금합니다.

편집 : 버그 추적기 용 플러그인을 작성 중입니다. 문자열은 텍스트 상자의 다른 페이지에 입력됩니다. 이 페이지에서 다음과 같은 함수를 실행하여이 페이지에 액세스합니다.

$t_filter = plugin_config_get('filter1'); 
$stringfilter1 = string_attribute($t_filter1); 

배열을 반복하는 것이 최선의 방법 일 것입니다. 50 번에 걸쳐 코드 조각을 쓰지 않아도 배열 끝에 각 새 문자열을 삽입하려면 어떻게해야합니까?

+1

여기서'$ stringfilterX' 변수는 모두 어디에서 오는가? –

+0

이 것이 https://codereview.stackexchange.com/에 더 좋을까요? – ThisGuyHasTwoThumbs

+1

당신은 $ stringfilterX vars를 다시 작성하고이를 반복 가능하도록 배열로 변환해야한다고 생각해야합니다. $$ 연산자를 사용하고 for 문을 1에서 N ($ pattern = "stringfilter"; for ($ i = 1; $ i <= N; $ i ++))으로 만드는 것에 의해 vars뿐만 아니라 vars를 반복 할 수있는 방법이 있습니다. {$ variable_name = $ pattern. $ i; print "변수의 값". $ variable_name. ":". $$ variable_name;}) 그러나 그것은 절대적으로 공포스럽고 쓸 수있는 가장 코드가 큽니다. –

답변

1

루프가 필요하지 않습니다. 먼저 모든 필터를 별도의 변수가 아닌 배열에 저장하십시오. 필자는 PHP 스크립트에서이를 수행하는 대신 입력 소스를 수정하여이 작업을 수행하려고합니다. 귀하의 의견에 따라 그 가능성 여부에 대해 잘 모르겠습니다. 은 다른 답변과 같은 루프가 필요합니다. str_ireplace을 사용하여 $reporteremail에서 필터 문자열을 확인할 수 있습니다. (이 $reporteremail를 수정하지 않습니다.)

str_ireplace($filters, '', $reporteremail, $count); 
if ($count) { 
    // run code 
} 

$count 매개 변수가 많은 교체가 수행 된 방법의 수를 포함합니다. 0이 아닌 경우 필터 중 하나 이상이 $reporteremail에서 발견되었습니다.

3

각 조각을 50 번 위에 쓰지 않아도 배열 끝에 추가 할 수 있습니까?

이 시도 :

$needles = []; 
for ($i = 0; $i < 50; $i++) { 
    $t_filter = plugin_config_get("filter$i"); 
    $needles[] = string_attribute($t_filter); 
} 
내가 최대 $ stringfilter50

에 $ stringfilter1 $ stringfilter2 등 모든 방법라는 문자열의 아주 긴 목록을 가지고 [...]

그러나 이것은 매우 긴 것입니다. 나는 여기 그것을 짧게 자른다.

더 깨끗하고 효율적인 방법이 있는지 궁금합니다.

위 코드 블록을 수행해야합니다. 위의

$flag = false; 
foreach ($needles as $needle) { 
    if (stripos($reporteremail, $needle) !== false) { 
     $flag = true; 
     break; 
    } 
} 

if ($flag) { 
    runcode(); 
} 

코드는 $needles 배열을 통해 반복에 의해 작동하고 stripos가 false를 반환하지 않는 경우 플래그를 설정합니다. iterating이 끝나면 플래그가 참인지 확인합니다. 그렇다면 배열에 바늘 중 하나가 있음을 의미합니다.


편집 양자 택일로, 당신은 더 빠르고 더 효율적인 하나 개의 루프에 모든 것을 할 수 있습니다.

$flag = false; 
for ($i = 0; $i < 50; $i++) { 
    $t_filter = plugin_config_get("filter$i"); 
    $needle = string_attribute($t_filter); 
    if (stripos($reporteremail, $needle) !== false) { 
     // One of the needles was found in $reporteremail. 
     runcode(); 
     break; 
    } 
}