채택완료

foreach문 문의 드립니다~

2021-09-16 (목) 16:52:06 1,995

안녕하세요?

알림톡 관련된 작업중입니다.

보낼 문장을 불러온 후에 #{치환} 이런 형태의 문장만 추출하고 싶습니다.

예를들어 아래와 같은 보낼 문자가 있다면...

【교육/행사명】 : #{교육명}
【교육(행사)일시】 : #{행사일}
【참가비용】 : #{비용}
【참가방법】 : 홈페이지 참조
【장소】 : #{장소}

빨강색으로 표시한 내용만 추출해서 다른 문장으로 교체하려고 합니다.

#{ } 안의 내용을 추출하는 것입니다.

이런 경우 어떤식으로 추출해야 하나요?

초보라자 아무 시작도 못하고 있습니다.

도움 부탁드립니다~

|

답변 4개 / 댓글 3개

채택된 답변
+20 포인트

지금과 같은 경우에는 foreach 를 잘 사용하지 않는 편입니다.

str_replace() 로 간편하게 적용할 수 방법이 있습니다.

ex.

Copy
$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;

답변에 대한 댓글 2개

답변 감사합니다. ${}의 형식으로 되어 있는것을 먼저 추출해야만 알려주신 방법을 사용할 수 있을것 같습니다.
str_replace() 함수에서,

#{교육명} 을 추출하여 $wr_1 텍스트로 교체합니다.
#{행사일} 을 추출하여 $wr_2 텍스트로 교체합니다.
....

추출 및 교체까지 한번에 처리하는 방법입니다.
2021-09-16 (목) 22:12:03
Copy
<?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); // 지정된 키워드 치환, 그 외 대상이 있는데 할당된 값 없으면 제거

    // 출력이나 메일 발송 등

}

텍스트에서 특정한 규칙으로 감싸져있거나 써져있는것을 출력하려면 정규식을 활용하셔야 합니다.

2021-09-16 (목) 17:04:59

예를들어 변수값 $aaa 에배열로 들어왔을때

foreach($aaa as $value){

   $content = 【교육/행사명】 : $value[aa] -- 데이터값
    【교육(행사)일시】 :$value[bb] -- 데이터값
   【참가비용】 : $value[cc] -- 데이터값
   【참가방법】 : 홈페이지 참조
   【장소】 : $value[dd] -- 데이터값

  여기서 $content를 가지고 보내면 될거같은디요

답변에 대한 댓글 1개

답변 감사합니다. 혹시 아래와 같이 추출하려면 어떻게 해야 하나요?
그러니까 #{} 괄호의 형식으로 된것만 표시하는 것입니다.

#{교육명}
#{행사일}
#{비용}
#{장소}

답변을 작성하려면 로그인이 필요합니다.