PHP에서 문자열의 시작 부분에 추가하기 위해. =에 해당하는 것이 있습니까?


103

문자열의 시작 부분에 텍스트를 추가하기 위해. =와 같은 것이 있는지 궁금합니다. 예 :

$foo =. 'bar';

작동하지 않습니다.

편집 : 예는 원래되었다 $foo =. $bar;달성 할 수있는$bar .= $foo;


나는 제임스를 보증합니다 '그가 그것에 대한 답을 써야했지만…
Christian

6
추가 그 $foo에게 $bar, 대신에 붙이는의 $bar$foo. 결과는 비슷하지만 $foo.
Eric V

그것은 약간의 혀를 씹는 댓글 (답이 아닌 댓글 인 이유)을 의미했습니다!
James Allardice

1
죄송합니다 ... 우, 나쁜 예 ... 고정 해주기 :
yuttadhammo

답변:


161

아니. 하지만 당신은 할 수 있습니다

$foo = "bar" . $foo

4

항상 자신의 기능을 만들 수 있습니다.

function prepend($string, $chunk) {
     if(!empty($chunk) && isset($chunk)) {
        return $string.$chunk;
     }
     else {
        return $string;
     }
}

$string 앞에 추가하고 싶은 부분이 될 것입니다. $chunk 될 것이고 그 위에 무언가를 추가하려는 텍스트가 될 것입니다.

검사가 선택 사항이라고 말할 수 있지만 거기에 있으면 실수로 null 값을 전달하는 것에 대해 걱정할 필요가 없습니다.


1
고마워, 그래도 맞아. 그것은 쉽게로 확실히 아니다 또는 고속 내장 뭔가 그게 쉽게하는 데 도움을주는 경우 복사 및 붙여 넣기 자유롭게로 :. D
아론

7
무언가가 !empty항상 있다면 isset이 이중 확인이 필요하지 않습니다. 이후 또한, $chunk함수의 필수 파라미터이고, 그것은 필요 함수에 전달되도록하거나 PHP 불평한다. 즉,이 검사는 약어로 표시 될 수 있습니다 if ($chunk)( 거짓 일명 "비어 있음"인지 확인하기 위해). 그러나 $chunk아무것도 포함하지 않으면 아무 일도 일어나지 않습니다. 따라서이 전체 기능 본문은 return $string . $chunk. 즉,이 모든 기능이 매우 불필요합니다.
deceze

1
변수를 설정할 수 있지만 비어있을 수도 있습니다. 예를 들어, 값이 ""인 변수는 비어 있지만 설정되어 있습니다.
Aaron

1
예, 그러나 귀하의 함수는 $foo . $bar. 나는 당신의 기능이 다른 일을하는 중요한 경우를 찾도록 도전합니다. :)
deceze

3

나는 이것이 얼마 전에 질문 / 답변을 받았음을 알고 있지만 할당 연산자가 아니고 일반 문자열 연결에 대한 사용법에 대해 아무도 언급하지 않았음에도 불구하고 기능적으로 동일 하므로이 대답을 제공합니다.

문자열 연결을 위해 sprintf( documentation ) 함수 계열의 사용을 조사 할 수 있습니다 . 두 문자열을 할당 연산자와 결합하는 것보다 훨씬 더 많은 위생과 유용성을 제공합니다.

$foo = 'foo';

$append = sprintf('%1$s%2$s', $foo, 'bar');
var_dump($append);
/* string(6) "foobar" */

$prepend = sprintf('%1$s%2$s', 'bar', $foo);
var_dump($prepend);
/* string(6) "barfoo" */

$prependInvert = sprintf('%2$s%1$s', $foo, 'bar');
var_dump($prependInvert);
/* string(6) "barfoo" */

$wrap = sprintf('%2$s%1$s%2$s', $foo, 'bar');
var_dump($wrap);
/* string(6) "barfoobar" */

vsprintf배열 작업이 개별 인수보다 값 위치를 관리하기 쉽기 때문에 일반적으로를 사용 합니다.

$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */

또한 값 배열을 사용하여 implode간단한 문자열 연결에 대한 결과 값 집합을 간단히 만들 수 있습니다 .

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */

불행히도 sprintf ()가 단순한 연결만큼 빠르다고 생각하지 않습니다. 그리고 확실히 구문 친화적 인 것 같지는 않습니다. 참조 : stackoverflow.com/q/7147305/2430549
HoldOffHunger 2018

정확하지만 구문 친화적이라는 의미는 확실하지 않습니다. 연결만큼 빠르거나 단순하지는 않지만. sprintf일반적으로 여러 언어에서 사용됩니다. sprintf사용시기에 대한 위치와 목적이 있습니다. 예. 여러 값을 캐스팅하거나를 사용하여 여러 입력을 적용하면 필요할sprintf 때 단순한 연결보다 더 많은 기능을 제공 합니다 . 참조 : 3v4l.org/8PWil 그러나 연결을위한 완전한 대체물로 사용해서는 안됩니다.
fyrye

3

내장 함수를 래핑 할 수 있습니다 substr_replace. 여기서 $ start 및 $ length 인수를 0으로 설정하면 $ replacement를 $ string 앞에 추가하고 결과를 반환합니다.

function prepend(& $string, $prefix) {
    $string = substr_replace($string, $prefix, 0, 0);
}

도우미 함수의 사용 예는 다음과 같습니다.

$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;

절차 적 프로그래밍에 관심이 있다면 그렇습니다.


나는 substr_replace를 사용하는 것에 관심이 없다고 생각합니다. $string = $prefix.$string;함수에서 간단한 작업을 수행하면 트릭을 수행 할 수 있습니다.
Pierre-Olivier Vares

2

선반 Blakethepatton의 의견을 답변 (감사합니다)에, 방법은 더 이상 변수 이름을 더 깔끔하게 이렇게하는 것은 사용하는 것입니다 참조 다음과 같이 변수를 :

$f = &$foo; $f = "bar{$f}";

이것은 Eric V대답 을 입력하는 것을 저장합니다. 원래 변수 이름이 12 자 이상인 경우 .

한 줄의 대안 :

$f = 'bar' . ($f = &$foo);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.