내용에서 첫번째 문자를 치환하는 방법이 궁금합니다.

내용에서 첫번째 문자를 치환하는 방법이 궁금합니다.

QA

내용에서 첫번째 문자를 치환하는 방법이 궁금합니다.

본문

안녕하세요.
혼자 풀기 어려운 문제라 도움 부탁드립니다.

 


스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전동점@47,000+$|영도해녀촌@47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@45,000+$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@44,000+$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@43,000+$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@42,000+$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@41,000+$|평산옥@40,000+$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@39,000+$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@37,000+$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@36,000+$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@35,000+$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$

 

wr_content가 이런 구조로 되어 있습니다.

원하는 결과는 "1000+"단위의 첫번째 문자열마다 font-style을 bold로 주고 싶습니다.


스무고개@<font-style:bold>51,000+</style>$|고향연화@<font-style:bold>50,000+</style>$|미포집해운대본점@50,000+$|기장손칼국수@<font-style:bold>49,000+</style>$|타이가텐푸라@<font-style:bold>48,000+</style>$|칸다소바부전동점@<font-style:bold>47,000+</style>$|영도해녀촌@47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@<font-style:bold>45,000+</style>$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@<font-style:bold>44,000+</style>$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@<font-style:bold>43,000+</style>$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@<font-style:bold>42,000+</style>$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@<font-style:bold>41,000+</style>$|평산옥@<font-style:bold>40,000+</style>$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@<font-style:bold>39,000+</style>$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@<font-style:bold>37,000+</style>$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@<font-style:bold>36,000+</style>$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@<font-style:bold>35,000+</style>$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$

즉 첫번째 51,000+일 때는 bold로 그 뒤는 변하지 않고

다음 50,000+일 때는 bold로 또 그뒤는 변하지 않고

이런 식으로 천 단위마다 스타일에 bold를 넣고 싶습니다.

 

구글링을 해보니 str_replace() 또는 substr_replace() 를 이용하는 방법이 있는데 처음 한번만 적용되고 나머지는 for문을 사용하지 않고서는 방법이 없더군요.

제 한계가 여기까지라 그누 회원님의 도움을 얻고자 합니다.

고수분들의 많은 의견 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 5


<?php
$wr_content = <<<HEREDOC
스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전동점@47,000+$|영도해녀촌@47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@45,000+$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@44,000+$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@43,000+$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@42,000+$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@41,000+$|평산옥@40,000+$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@39,000+$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@37,000+$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@36,000+$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@35,000+$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$
HEREDOC;
 
$chks = [];
$content = preg_replace_callback('/@[\d,]+\+\$/', function ($arg) use (&$chks) {
    $val = $arg[0];
    
    if (isset($chks[$val]) == false) {
        $chks[$val] = true;
        $val = str_replace(['@', '$'], ['@<font-style:bold>', '</style>$'], $val);
    }
    
    return $val;
}, $wr_content);
 
echo $content;

먼저 확인하고 싶은 것은

 

<font-style:bold>51,000+</style> 은

<span style='font-weight:bold'>51,000</span>+ 로 표현되어야 맞지 않을까요?

 

이게 맞다고 하시면 그에 맞춰서...

 

----------

 


<?php
$wr_content = "스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전동점@47,000+$|영도해녀촌@47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@45,000+$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@44,000+$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@43,000+$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@42,000+$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@41,000+$|평산옥@40,000+$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@39,000+$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@37,000+$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@36,000+$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@35,000+$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$";
?>
 
<div id="bo_v_con">
    <?php echo $wr_content; ?>
</div>
.
.
.
<script>
const bo_v_con = document.querySelector("#bo_v_con");
bo_v_con.innerHTML = bo_v_con.innerHTML.replaceAll("@", "@<span style='font-weight:bold'>").replaceAll("+$", "</span>+$"); 
</script>

 

----------

관심 가져주셔서 감사합니다.
51,000+ 에서 +가 천단위숫자 "이상" 이라서 그 안네 있는 것이고 $가 각각의 구별자였습니다. :)
말씀해주신 스크립트는 모든 숫자에 볼드가 들어가게 되지 않나요?
전 처음 숫자에만 볼드가 필요해서요.


$wr_content = "스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전동점@47,000+$|영도해녀촌@c47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@45,000+$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@44,000+$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@43,000+$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@42,000+$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@41,000+$|평산옥@40,000+$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@39,000+$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@37,000+$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@36,000+$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@35,000+$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$";
$parts = explode("+", $wr_content);
$result = "";
foreach ($parts as $part) {
    $subparts = explode("@", $part);
    $subparts[0] = "<font style='font-weight:bold;'>{$subparts[0]}</font>";
    $result .= implode("@", $subparts) . "+";
}
$result = rtrim($result, "+");
echo $result;

베르만님의 답변이 멋진 답변입니다

액트온님의 답변이 질문을 잘못 이해하신 것 같아 조금 수정 했습니다

이런 방법도 있다는 것을 참고로 보세요

----------------------------

 $wr_content = "스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전동점@47,000+$|영도해녀촌@47,000+$|쌍둥이돼지국밥본점@47,000+$|피아크카페&베이커리@45,000+$|에테르@45,000+$|선창횟집@45,000+$|비아조@45,000+$|해운대기와집대구탕@45,000+$|초힛사츠@44,000+$|합천국밥집@44,000+$|남천녹차팥빙수@44,000+$|로우앤스윗@43,000+$|어밤부@43,000+$|차선책본점@43,000+$|헤이든@43,000+$|네살차이@42,000+$|어느멋진날@42,000+$|버거샵@42,000+$|깡돼후@41,000+$|평산옥@40,000+$|나이브브류어스@40,000+$|해운대밀면@40,000+$|류센소본점@40,000+$|이재모피자서면점@39,000+$|거대갈비@39,000+$|다이도코로@39,000+$|카페인차저@39,000+$|자매국밥@39,000+$|대정양곱창@39,000+$|의령식당@37,000+$|수민이네@37,000+$|라이프커피앤티@37,000+$|송정3대국밥@36,000+$|거대곰탕@36,000+$|갈삼구이@36,000+$|백설대학@36,000+$|양가네양곱창@36,000+$|첨벙@36,000+$|바다마루전복죽@36,000+$|듀플릿해리단길@36,000+$|탐복@36,000+$|마가만두@36,000+$|밀양순대돼지국밥부산본점@35,000+$|상생라멘광안리점@35,000+$|개미집국제시장본점@35,000+$|오후의홍차@35,000+$|순진한칼국수@35,000+$";
$parts = explode("+", $wr_content);
$result = "";          $tmp=[];
foreach ($parts as $part) {
    $subparts = explode("@", $part);      
    if(!isset($subparts[1])) continue;

    if(! in_array( $subparts[1], $tmp)){$tmp[]=$subparts[1];  $subparts[1] = "<b>{$subparts[1]}+</b>";     }
    else $subparts[1] = $subparts[1].'+';
    $result .= implode("@", $subparts);
}
$result.="$";

echo $result;

 

 

 

 

1. 별도 테이블 사용을 추천합니다.

2. 처음 것만 문자열 교체를하는 것이 효률적입니다.

$s="$wr_content = "스무고개@51,000+$|고향연화@50,000+$|미포집해운대본점@50,000+$|기장손칼국수@49,000+$|타이가텐푸라@48,000+$|칸다소바부전 ... ";
list( $s1, $s2)= explode( '@', $s, 2);
list( $s2a, $s2b)= explode( '+', $s2, 2);
echo $s1, '@<font-style:bold>',$s2a,'+</font>',$s2b;

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

회원로그인

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