문제

특정 기사 ($ link_cat)의 범주가 포함 된 배열이 있습니다. 그런 다음 mysql_fetch_array를 사용하여 인쇄합니다 모두 확인란이있는 목록에 사용 가능한 카테고리 중 이 작업을 수행하는 동안 켜진 값을 다른 배열의 값과 비교하기를 원합니다. 일치가있는 경우 카테고리 중 하나 가이 기사에 적용되며 확인 된 속성을 적용하기 위해 코드 줄을 인쇄해야합니다. 엄청난! 작동하지 않는 것을 제외하고 = [

    while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ){
    $cat[$i] = $row['category'];
    $cat_id[$i] = $row['cat_id'];

    echo '<li><input type="checkbox" ';

    $catCount = count($link_cat);
    for ($ct = 0; $ct < $catCount; $ct++){
        if ($cat_id[$i] == $link_cat[$ct]){ 
            echo 'checked="checked" ';
        }
    }

    echo 'name="' . $cat_id[$i] . '" />' . $cat[$i] . '</li>';

    $i++;
}

나는 전에 중첩 된 루프를 한 적이 없다 (나는 그것이 문제라고 생각한다).

문제는 이것이 실행될 때 $ link_cat [0]이 확인해야 할 첫 번째 카테고리가있는 것 같습니다. 등록하지 않습니다. 비워집니다. FOR 루프 내부의 변수를 인쇄하면이를 확인했습니다. 다른 [1] [2] 등은 괜찮습니다. 그것은 단지 [0]입니다. 하지만 왜? 말이되지 않는 것 같습니다. 나는 배열의 내용을 채워진대로 인쇄했기 때문에 거기에 무언가가 있다는 것을 알고 있습니다. 그러나 루프 중에는 단지 표시되는 것이 아닙니다. 어떤 아이디어?

도움이 되었습니까?

해결책

약간의 버그 수정 (및 뻔뻔스러운 스타일 변경) : 버전은 확인 된 = "Checked"를 여러 번 인쇄 할 수 있습니다. 하다 $cat 그리고 $cat_id 배열이 필요합니까?

while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ) {
    $cat = $row['category'];
    $cat_id = $row['cat_id'];

    echo '<li><input type="checkbox" ';
    if ( in_array($cat_id, $link_cat) ) {
        echo 'checked="checked" ';
    }
    echo "name='$cat_id' />$cat</li>";
}

일반적으로 문제에 디버거를 던지는 상황에서는 좋은 것을 던지는 것을 좋아합니다. print_r 주석 블록 (디버그 출력에 대한 뷰 소스, 라이브 사이트에서 더 안전 함).

echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';

다른 팁

원래 배열 루핑이 재설정이 필요한 것에 대해 매우 잘못되었지만, 그 배열을 통해 반복되는 것이 당신이 추구하는 일을 가장 빠른 방법이 아니라는 느낌을 흔들 수는 없습니다.

아마도 Array_Search 할 것입니다 array_key_exists. in_array 승자처럼 보이지만 나는 그것을 생각하지 않았다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top