채택완료

문자열에서 중간 글자만 다른 걸로 바꾸기

2021-12-23 (목) 07:22:59 3,539

$origin = "1234567";

이렇게 있다고 하면 4만 8로 바꿀려면 어떻게 해야 하나요?

substr 써서 앞뒤 잘랐다 붙이는 수밖에 없나요?

|

답변 3개 / 댓글 2개

채택된 답변
+20 포인트
2021-12-23 (목) 11:26:35

"문자열에서 중간 문자만"이라 했으면서

예로 고정된 문자열 값을 제시하니

지정 문자 치환밖에 나올 수 없죠.

* 만약 '4234564' 문자열에서 4를 8로 변경한다면, 8238568이 되겠죠?

어쨌거나 문자열에서 중간 글자만 변경하려면

먼저 문자열의 길이를 구하고,

홀수 길이는 가운데가 명확하니 상관이 없으나

짝수 길이일 때는 어떤 문자를 치환해줄지 규칙을 정해야 합니다.

Copy
<?php

$origin = '123456'; // 예를 들어 짝수 길이일 때

$len = strlen($origin); // 길이 = 6
$mid = floor($len/2); // 2로 나누고, 소수점 버림. 길이가 7일때 3, 길이가 6일때 3

if ( $len%2 ) { // 홀수 길이
    $result = substr_replace($origin, '*', $mid, 1); // 1234567 -> 123*567
} else { // 짝수 길이
    $result = substr_replace($origin, '*', $mid-1, 1); // 가운데 앞 123456 -> 12*456
    $result = substr_replace($origin, '*', $mid, 1); // 가운데 뒤 -> 123*56
    $result = substr_replace($origin, '**', $mid-1, 2); // 가운데 두 글자 -> 12**56 / * 하나 지정, 12*56
}

답변에 대한 댓글 2개

제가 원하는 답변은 아니였으나 도움이 많이 되어 채택하였습니다.
제가 질문을 모호하게 한것 같습니다.
substr_replace 써서 잘 해결되었습니다.
감사합니다.

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