foreach ($board as $key => $val) : 문에서 $board 의 배열형식에 대해서 문의드립니다.

foreach ($board as $key => $val) : 문에서 $board 의 배열형식에 대해서 문의드립니다.

QA

foreach ($board as $key => $val) : 문에서 $board 의 배열형식에 대해서 문의드립니다.

본문

안녕하세요. 
여기 사이트에 있는 sitemap 생성기를 사용하고 있는데요. 
아래는 코드의 일부입니다. 
=====================================
    # 게시판 리스트
    $sql = " SELECT * FROM {$g5['board_table']} WHERE bo_read_level = 1";
    $query = sql_query($sql);
    
    while ($row = sql_fetch_array($query)) {
        $board[] = $row;
    }
    
    # 파일 작성 시작
    $sitemap = fopen($wwwPath.'/sitemap/sitemap.xml', 'w') or die('file not found'); # 사이트맵 생성 경로 변경
        fwrite($sitemap, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        fwrite($sitemap, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">');
    
        $boardLink = "";
        $contentLink = "";
        foreach ($board as $key => $val) :
            # 마지막 게시물 시간
            $sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC LIMIT 0, 1";
            $query = sql_fetch($sql);
            

=====================================
지금까지 잘 사용을 하였으나, 다른 사이트에 적용을 할려고 하니, 기존 사이트와는 다르게.
====================
print_r($board);

Array
(
    [bo_table] => 
    [bo_skin] => 
    [bo_mobile_skin] => 
    [bo_upload_count] => 0
    [bo_use_dhtml_editor] => 
    [bo_subject] => 
    [bo_image_width] => 0
    [0] => Array
        (
            [bo_table] => all
            [gr_id] => shop
            [bo_subject] => 제목
            [bo_mobile_subject] => 
            [bo_device] => both
            [bo_admin] => admin
            [bo_list_level] => 1
            [bo_read_level] => 1
            [bo_write_level] => 10
~~~~
==========================
와 같이 인덱스 배열이 아닌 연관 배열로 처리가 되어서, 
foreach ($board as $key => $val) :
이부분에서 $key 값에 인덱스 숫자가 아닌, 
    [bo_table] => 
    [bo_skin] => 
    [bo_mobile_skin] => 
    [bo_upload_count] => 0
    [bo_use_dhtml_editor] => 
    [bo_subject] => 
    [bo_image_width] => 0
    [0] 
이 부분들로 잡힙니다.  그래서 원하는대로 제대로 처리가 되지 않구요.

원래는 부분이
===========================
print_r($board);

Array
(
    [0] => Array
        (
            [bo_table] => notice
            [gr_id] => aaa
            [bo_subject] => 제목
            [bo_mobile_subject] => 
            [bo_device] => both
            [bo_admin] => 
            [bo_list_level] => 1
            [bo_read_level] => 1
            [bo_write_level] => 10
            [bo_reply_level] => 10
            [bo_comment_level] => 2
            [bo_upload_level] => 10
            [bo_download_level] => 10
            [bo_html_level] => 10
            [bo_link_level] => 10
            [bo_count_delete] => 1
            [bo_count_modify] => 1
~~~~~~~~~~~~~~~~
===================================

와 같이 인덱스 배열로 처리가 되어서 올바로 처리가 되었는데요. 

문제는 같은 sitemap.php 코드를 사용하였는데, 한쪽은 오류가 나고 한쪽은 정상처리가 됩니다.

혹시 테이블에 문제가 있나해서, g5_board_2테이블을 임시로 만들어서 정상작동하는 테이블 데이타를 넣어서 테스트를 해봤는데도 마찬가지 결과입니다. 

본사이트에서 사용하는 연관되는 코드들에서 문제가 생긴것인가 생각중인데 해결이 되지 않고 있습니다. 
도움 부탁드립니다.
감사합니다. 
 

이 질문에 댓글 쓰기 :

답변 2

해당 코드 이전에 이미 board 배열이 있는 상태입니다.

화일문을 전에 배열을 초기화 해주세요

답변 정말 감사합니다. 덕분에 잘 해결되었습니다. 배열의 모양을 자세히 보면, 있는 배열에 추가 되었다는것을 알수 있는 것인데, 너무 오랫동안 원인을 찾지 못하고 헤매었던것 같습니다.
그런데, 아무리 봐도 어떻게 이미 배열에 값이 있었던 것일까요?
저는 이곳에 있는 코드를 거의 그대로 사용을 하였는데요.
참고로 제가 사용한 코드를 그대로 올리니, 혹시 어떻게 이전에 배열값이 있을수 있었는지 확인을 좀 부탁드려도 될런지요?
<?php
# 총 4군데 변경입니다.
# common.php 파일 위치 절대 경로 세팅
include_once ("/var/www/common.php"); # 꼭 변경하세요.

# 기본 설정
$wwwPath = "/var/www/"; # 꼭 변경하세요.
$wwwURL = "http://www.domain.com"; # 꼭 변경하세요.

# 게시판 리스트
$sql = " SELECT * FROM {$g5['board_table']} WHERE bo_read_level = 1";
$query = sql_query($sql);

while ($row = sql_fetch_array($query)) {
$board[] = $row;
}

# 파일 작성 시작
$sitemap = fopen($wwwPath.'/sitemap/sitemap.xml', 'w') or die('file not found'); # 사이트맵 생성 경로 변경
fwrite($sitemap, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
fwrite($sitemap, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">');

$boardLink = "";
$contentLink = "";
foreach ($board as $key => $val) :
# 마지막 게시물 시간
$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC LIMIT 0, 1";
$query = sql_fetch($sql);

# 마지막 게시물 생성 시간이 없으면 현재 시간으로 설정
$query['wr_datetime'] = (empty($query['wr_datetime'])) ? date('Y-m-d\TH:i:s')."+00:00" : preg_replace("/\s/im", "T", $query['wr_datetime'])."+00:00";

# 게시판 링크 작성
$boardLink = "";
$boardLink = "<url>";
$boardLink .= "<loc>";
$boardLink .= G5_BBS_URL."/board.php?bo_table={$val['bo_table']}";
$boardLink .= "</loc>";
$boardLink .= "<lastmod>{$query['wr_datetime']}</lastmod>";
$boardLink .= "<changefreq>daily</changefreq>";
$boardLink .= "<priority>0.9</priority>";
$boardLink .= "</url>";

# 게시판 링크 작성
fwrite($sitemap, $boardLink);

# 게시판 게시물 작성
$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC";
$query = sql_query($sql);

unset($row);
while ($row = sql_fetch_array($query)) {
$row['wr_datetime'] = (empty($row['wr_datetime'])) ? date('Y-m-d\TH:i:sp')."+00:00" : preg_replace("/\s/im", "T", $row['wr_datetime'])."+00:00";
$contentLink = "";
$contentLink = "<url>";
$contentLink .= "<loc>";
$contentLink .= G5_BBS_URL."/board.php?bo_table={$val['bo_table']}&amp;wr_id={$row['wr_id']}";
$contentLink .= "</loc>";
$contentLink .= "<lastmod>".preg_replace("/\s/im", "T", $row['wr_datetime'])."</lastmod>";
$contentLink .= "<changefreq>weekly</changefreq>";
$contentLink .= "<priority>0.5</priority>";
$contentLink .= "</url>";

# 게시판 게시물 링크 작성
fwrite($sitemap, $contentLink);
}
endforeach;

fwrite($sitemap, '</urlset>');
fclose($sitemap);
?>

{$g5['write_prefix']}{$val['bo_table']}에서 $val은 어디서 나온 거죠?

{$g5['write_prefix']}_{$board['bo_table']}로 고치면 될 거 같은데요.

{$g5['write_prefix']}{$board['bo_table']} 이게 맞나? 가물가물하네요 :)

답변감사합니다.  그러나, 문제가 해결되지는 않네요ㅠ

foreach ($board as $key => $val) :
에서 배열의 값입니다.

문제는, 쿼리이 결과가
Array
(
    [0] => Array
        (
            [bo_table] => notice
            [gr_id] => aaa
이런식의 인덱스 배열로만 나와야 하는데,
Array
(
    [bo_table] =>
    [bo_skin] =>
    [bo_mobile_skin] =>
    [bo_upload_count] => 0
    [bo_use_dhtml_editor] =>
    [bo_subject] =>
    [bo_image_width] => 0
    [0] => Array
        (
            [bo_table] => all
이렇게 몇개의 항목이 연관배열로 담겨나오는 이유를 모르겠네요ㅠㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 42
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT