지정된 위치에 문자열 삽입


270

그렇게 할 수있는 PHP 함수가 있습니까?

strpos하위 문자열의 위치를 ​​얻는 데 사용 하고 있으며 string그 위치 뒤에 를 삽입하고 싶습니다 .

답변:


566
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);

http://php.net/substr_replace


24
이것은 정답입니다. 내장 함수는 사용자 작성 함수보다 우선합니다.
Benjam

13
예, 네 번째 인수가 "0"이면 원래 문자열을 덮어 쓰지 않고 교체 문자열이 삽입됩니다.
Buttle Butkus

7
훌륭한 답변. 그러나 게으른 사람들 (나 같은)의 경우 게시물에 짧은 설명이 있어야합니다. 지금하겠습니다. php.net에서 복사 해 붙여 넣기 : "물론 길이가 0이면이 함수는 지정된 시작 오프셋에서 문자열에 대체를 삽입하는 효과가 있습니다."
Wolfsblvt

7
substr_replace () 함수는 멀티 바이트 안전하지 않습니다! $ pos는 UTF-8 문자의 중간에있을 수 있습니다. @ tim-cooper의 솔루션을 사용해야하지만 mb_substr ()을 사용해야 할 수도 있습니다.
richplane


12

시도해보십시오. 하위 문자열 수에 관계없이 작동합니다.

<?php
    $string = 'bcadef abcdef';
    $substr = 'a';
    $attachment = '+++';

    //$position = strpos($string, 'a');

    $newstring = str_replace($substr, $substr.$attachment, $string);

    // bca+++def a+++bcdef
?>

7

putinplace 함수 대신 stringInsert 함수를 사용하십시오. 나중에 함수를 사용하여 mysql 쿼리를 구문 분석했습니다. 출력은 괜찮아 보이지만 쿼리 결과 오류를 추적하는 데 시간이 걸렸습니다. 다음은 하나의 매개 변수 만 필요한 stringInsert 함수 버전입니다.

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  

4
str_replace($sub_str, $insert_str.$sub_str, $org_str);

@minitech op가 말했다 using strpos to get the position of a substring, 그래서 substring온다. 그리고 그는 단 하나의 입장을 찾으라고 말하지 않았습니다.
xdazz

3

나는 그것을 위해 내 오래된 기능 중 하나를 가지고있다 :

function putinplace($string=NULL, $put=NULL, $position=false)
{
    $d1=$d2=$i=false;
    $d=array(strlen($string), strlen($put));
    if($position > $d[0]) $position=$d[0];
    for($i=$d[0]; $i >= $position; $i--) $string[$i+$d[1]]=$string[$i];
    for($i=0; $i<$d[1]; $i++) $string[$position+$i]=$put[$i];
    return $string;
}

// Explanation
$string='My dog dont love postman'; // string
$put="'"; // put ' on position
$position=10; // number of characters (position)
print_r( putinplace($string, $put, $position) ); //RESULT: My dog don't love postman

이것은 완벽하게 작동하는 작고 강력한 기능입니다.


3

이것은 키워드를 찾은 후 다음 줄에 텍스트를 추가하는 간단한 해결책이었습니다.

$oldstring = "This is a test\n#FINDME#\nOther text and data.";

function insert ($string, $keyword, $body) {
   return substr_replace($string, PHP_EOL . $body, strpos($string, $keyword) + strlen($keyword), 0);
}

echo insert($oldstring, "#FINDME#", "Insert this awesome string below findme!!!");

산출:

This is a test
#FINDME#
Insert this awesome string below findme!!!
Other text and data.

3

그냥 무언가를 추가하고 싶었습니다. 팀 쿠퍼의 대답이 매우 유용하다는 것을 알았습니다. 위치 배열을 받아들이고 모든 위치에서 삽입을 수행하는 방법을 만드는 데 사용했습니다.

편집 : 내 이전 함수$insertstr는 1 문자로가정하고 배열이 정렬된 것처럼 보입니다. 이것은 임의의 문자 길이에서 작동합니다.

function stringInsert($str, $pos, $insertstr) {
    if (!is_array($pos)) {
        $pos = array($pos);
    } else {
        asort($pos);
    }
    $insertionLength = strlen($insertstr);
    $offset = 0;
    foreach ($pos as $p) {
        $str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
        $offset += $insertionLength;
    }
    return $str;
}

1
작동하지 않습니다. 오프셋은 $ interstr이 1 자 길이 인 것으로 가정합니다. insertstr 길이에 따라 오프셋을 추가하고 0으로 시작하여 substr 뒤에 추가해야합니다. 또한 작동하려면 위치를 낮음에서 높음으로 정렬해야합니다. : 당신은 당신의 코드를 편집 할 수 있습니다, 여기에 함수를 수정 pastebin.com/g9ADpuU4
마티아스 S

감사 @MatthiasS, 다음 시간은 편집 또는 제안 된 편집, 나는 2 년 후 때까지이 통지를하지 않았다
chiliNUT

1

간단하고 해결하는 다른 방법 :

function stringInsert($str,$insertstr,$pos)
{
  $count_str=strlen($str);
  for($i=0;$i<$pos;$i++)
    {
    $new_str .= $str[$i];
    }

    $new_str .="$insertstr";

   for($i=$pos;$i<$count_str;$i++)
    {
    $new_str .= $str[$i];
    }

  return $new_str;

}  

어쩌면 기능이 어떻게 사용되는지 진술 할 수 있습니까?
Rotimi

1
function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}

$posEnd불필요합니다. 문제는 지정된 위치 뒤에 하위 문자열을 삽입하는 것입니다.
Styx

예,하지만이 프로젝트를 위해이 기능을 만들었습니다. 어디에서 교체하고 또 다른 곳에 삽입해야했습니다. 내 기능 이이 질문에 대해서도 작동하므로 왜 당신이 나를 빼지 않았습니까?
Ivan Ivan

0

이상한 답변이 여기에! sprintf [문서 링크]를 사용하여 다른 문자열에 쉽게 문자열을 삽입 할 수 있습니다 . 이 기능은 매우 강력하며 여러 요소 및 기타 데이터 유형도 처리 할 수 ​​있습니다.

$color = 'green';
sprintf('I like %s apples.', $color);

당신에게 문자열을 제공합니다

I like green apples.

1
좋습니다. 그러나 프로그래밍 방식은 다루지 않습니다. 우리는 보통 'I like apples.'변수로 사용합니다. 따라서 %s문자열에서 먼저 삽입 해야합니다. 원래 문제로 돌아 가기
KeitelDOG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.