foreach문 문의 드립니다~
본문
안녕하세요?
알림톡 관련된 작업중입니다.
보낼 문장을 불러온 후에 #{치환} 이런 형태의 문장만 추출하고 싶습니다.
예를들어 아래와 같은 보낼 문자가 있다면...
【교육/행사명】 : #{교육명}
【교육(행사)일시】 : #{행사일}
【참가비용】 : #{비용}
【참가방법】 : 홈페이지 참조
【장소】 : #{장소}
빨강색으로 표시한 내용만 추출해서 다른 문장으로 교체하려고 합니다.
#{ } 안의 내용을 추출하는 것입니다.
이런 경우 어떤식으로 추출해야 하나요?
초보라자 아무 시작도 못하고 있습니다.
도움 부탁드립니다~
답변 4
지금과 같은 경우에는 foreach 를 잘 사용하지 않는 편입니다.
str_replace() 로 간편하게 적용할 수 방법이 있습니다.
ex.
$content = "【교육/행사명】 : #{교육명}
【교육(행사)일시】 : #{행사일}
【참가비용】 : #{비용}
【참가방법】 : 홈페이지 참조
【장소】 : #{장소}
";
$arr_s = array('#{교육명}', '#{행사일}', '#{비용}', '#{장소}');
$arr_r = array($wr_1, $wr_2, $wr_3, $wr_4);
$str = str_replace($arr_s, $arr_r, $content);
echo $str;
예를들어 변수값 $aaa 에배열로 들어왔을때
foreach($aaa as $value){
$content = 【교육/행사명】 : $value[aa] -- 데이터값
【교육(행사)일시】 :$value[bb] -- 데이터값
【참가비용】 : $value[cc] -- 데이터값
【참가방법】 : 홈페이지 참조
【장소】 : $value[dd] -- 데이터값
여기서 $content를 가지고 보내면 될거같은디요
}
텍스트에서 특정한 규칙으로 감싸져있거나 써져있는것을 출력하려면 정규식을 활용하셔야 합니다.
<?php
// foreach는 왜 언급했는지 모르겠군요. 그냥 내용에서 원하는 형태로 구성된 문자열을 뽑을 수 있습니다.
$html = '【교육/행사명】 : #{교육명}
【교육(행사)일시】 : #{행사일}
【참가비용】 : #{비용}
【참가방법】 : 홈페이지 참조
【장소】 : #{장소}';
preg_match_all('/#\{.+?\}/', $html, $matches);
print_r($matches[0]);
/*
Array
(
[0] => #{교육명}
[1] => #{행사일}
[2] => #{비용}
[3] => #{장소}
)
*/
// 어차피, 지정된 키워드 치환이니 굳이 뽑아낼 필요가 없습니다.
// 반복문 내에서 지정 키워드 치환은 아래처럼 하면 됩니다.
$html = '질문의 기본 내용'; // 파일에서 읽어오든, DB에서 읽어오든 기본 내용
$replace = [ // 사용되는 키워드 나열
'#{교육명}' => '',
'#{행사일}' => '',
'#{비용}' => '',
'#{장소}' => '',
'#{키워드1}' => '',
'#{키워드2}' => '',
'#{키워드3}' => '',
'#{키워드4}' => '',
];
foreach ( $list as $i=>$row ) {
$change = $replace; // 초기화(기본값 준비)
$change['#{교육명}'] = $row['subject']; // #{교육명} → 제목으로 치환용
$change['#{행사일}'] = $row['wr_1'];
// 등등 치환이 필요한 값들 할당
$content = strtr($html, $change); // 지정된 키워드 치환, 그 외 대상이 있는데 할당된 값 없으면 제거
// 출력이나 메일 발송 등
}
답변을 작성하시기 전에 로그인 해주세요.