2012-11-05 3 views
0

foreach 루프 내에서 폭발 할 경우 내 코드입니다PHP는 :와 조건이 내가 텍스트 필드에서 사용자의 입력에서 여러 값을 얻으려고 노력하고 폭발하거나 다음 조건 if 문</p> <p>에 계속 추가 할하고

foreach ($list['post'] as $item) { 
    if(($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4)){ 
     $this->list_post($item); 
    } 
} 

지금 정확히 내가 찾던 나는 사용자가 여러 카테고리 ID를 추가 할 수 있도록 할 if(($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4))에 각 ID는 내가 전에 이런 짓을하지 AND ($item['single']['catid'] != 4)

AND 추가 ID 코드를 추가하고 모르는 이 방법이 적절한 방법 일 수도 있고 가능한 다른 방법 일 수도 있습니다.

덕분에 많은

답변

1

당신은 예를 들어, 당신이 검사 할 카테고리 ID의 배열의 일종이 있어야합니다

$categories = array(8, 4); 

은 그럼 당신은 PHP의 in_array(needle, haystack) 내장 함수 같은 것을 사용할 수 있습니다.

if 조건은 다음 중 하나가됩니다. if (!in_array($item['single']['catid'], $categories)) {.

당신은 더 복잡한 문제에 대한 원리를 이해할 수 있도록, 당신은 위의를 사용해야합니다,하지만 난 당신에게 그것이 작동하는 방법의 아이디어를 제공하기 위하여려고하고있다 :

기능이있는 ($ 목표, $ 배열) { foreach ($ array as $ array) {// 배열의 각 요소를 통해 이동 if ($ element == $ target) {// 검색 대상 요소가 있는지 확인합니다. return true; // true를 반환하고, 존재하고, 거기서 멈추십시오. } else { // 그냥 무시하십시오 ... } } false를 반환합니다. // 여기에 도착하면 true를 반환 한 것이 없음을 의미하므로 존재하지 않습니다. }

if (exists($item['single']['catid'], $categories)) {으로 사용됩니다.

존재하는지 여부를 평가하기 전에 처리해야하기 때문에 if 문 내부에있는 경우 작동하지 않습니다. 그래서 당신은 if 문장 전에 그것을 할 수 있었고 결과를 변수에 저장하거나 함수 (PHP가 제공)를 사용할 수있었습니다.

개념이 더 복잡한 문제를 해결하는 데 도움이되기를 바랍니다.

참고 :이 입력은 배열 형태로 가정하며, 직접 입력하지 않으면 다양한 방법으로 빌드 할 수 있습니다.

업데이트는 :

입력 필드를 통해 얻을 입력하면 POST 중 하나를 지정하거나하는 방법으로 GET 할 수있는 양식을 통해 전송됩니다. 그 후

$categories_string = $_POST['the_name_field_in_the_input_tag']; 

당신이 목록으로 이해해야한다 : 가정 당신이 사용하는 POST이가 텍스트 필드에 입력 된대로 문자열로 입력 을 얻을 것 어떻게입니다 항목을 쉼표로 구분하여 가정 해 봅시다 : 1,3,5,8. 다음은 단순히 쉼표로 구분됩니다. explode($delimiter, $string)을 사용할 수 있습니다. 그런 :

$categories_array = explode(',', $_POST['categories']); 

하지만 1, 2, 3,5,6 같은 것을 얻을 수 있도록, 입력을 믿을 수 없다. 당신은 모든 공간을 가질 것이기 때문에 그 공간들은 그것을 망칠 것입니다. 이를 제거하려면 예를 들어 trim을 사용할 수 있습니다.

$categories = array(); // Create the array in which the processed input will go 
foreach ($categories_array as $c) { // Go through the unprocessed one 
    $categories[] = trim($c) * 1; // Process it, and fill the result. The times one is just so that you get numbers in the end and not strings... 
} 

은 그럼 당신은 이전과 같이 사용하지만, 이것은 단지 예를 들어 있음을 유의하십시오, 당신은 심지어 모든 단계를 필요로하지 않을 수 있습니다, 정기적으로이 입력을 처리하는 데 훨씬 더 효율적인 방법은 (가 수 표현 예). 그러나 여기에 대한 관심은 입력을 위생적으로하는 것이 아니라 결국 그렇게 할 필요가 있다는 것을 명심하십시오.

희망 사항 : 충분히 명확합니다.

+0

대단히 자세한 설명과 이해에 감사드립니다. 고맙다. 나는 이해하고 다시 당신에게 돌아 오기 위해 지금 노력하고 있습니다. 예 양식 (입력 필드)을 사용하여 사용자가 '1, 5, 10, 52 .....'과 같은 것을 추가 할 수 있도록합니다. –

+0

@pixelngrain 환영합니다 :) 답변을 업데이트하고 알았습니다! – jadkik94

+0

큰 도움과 설명. 고마워하고 잘 작동합니다. –

1

당신은 가능성의 변수 수에 대한 값을 확인하기위한 in_array() 더 나을 수 있습니다.

+0

빠른 도움말 감사합니다. 몇 가지 예를 들어 주시겠습니까? –

1

나는 당신의 문제를 이해하고 있는지 잘 모르겠다. 당신은, 사용자가 입력 다른 값으로 할 수 있도록 예를 들어 원하는 : 이후

$string = "5, 6, 7, 8, 10"; 

, 당신은 'CATID는'해당 배열에없는 경우 검사 할을하고, 그렇지 않은 경우는 $ this-를 실행하려면> list_post ($ item);

그렇다면,이 같은 것을 사용해야합니다

$values = explode(", ", $string); //make array from values 
foreach ($list['post'] as $item) { 
    if (!in_array($item['single']['catid'], $values)) { //check whether catid is in array 
     $this->list_post($item); // execute whatever you want 
    } 
} 

그것이 도움이되기를 바랍니다.

+0

코드에 대해 Dygestro에게 감사드립니다. 내가 확인하고 당신에게 돌아갈 것입니다 –

+0

당신의 대답은 확실한 해결책이지만'jadkik94'는 약간의 세부 지식을 제공합니다. 당신의 도움과 노력에 감사드립니다. - 탱크가 많이 있습니다 –

+0

확실한 점은 기꺼이 도와 드리겠습니다. – Dygestor