Qualquer equivalente a. = Para adicionar ao início da string em PHP?

103

Apenas me perguntando se existe algo como. = Para adicionar texto ao início de uma string, por exemplo:

$foo =. 'bar';

o que não funciona.

Editar: o exemplo foi originalmente o $foo =. $bar;que pode ser alcançado com$bar .= $foo;

Yuttadhammo
fonte
Eu atesto por James, embora ele devesse ter escrito uma resposta para isso ...
Christian
6
Isso adiciona $fooa $bar, em vez de anexar $bara $foo. O resultado é semelhante, mas acho que ele quer sofrer uma mutação $foo.
Eric V
Era para ser um comentário meio irônico (é por isso que é um comentário, não uma resposta)!
James Allardice
1
ugh ... desculpe, mau exemplo ... corrigido agora :)
yuttadhammo

Respostas:

161

Não. Mas você pode fazer

$foo = "bar" . $foo
Eric V
fonte
1
facepalm duro obrigado
Nick Rolando
4

Você sempre pode fazer sua própria função para isso:

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

$stringseria a parte que você deseja prefixar e $chunko texto em que deseja que algo prefixado nela.

Você poderia dizer que as verificações são opcionais, mas por ter isso lá, você não precisa se preocupar em passar um valor nulo por acidente.

Aaron
fonte
1
Obrigado, você está certo. Definitivamente, não é tão fácil ou rápido quanto algo integrado. Sinta-se à vontade para copiar e colar se isso ajudar a torná-lo mais fácil: D
Aaron
7
Se algo está !empty, também é sempre isset, não há necessidade de verificar novamente. Além disso, como $chunké um parâmetro obrigatório da função, ele precisa ser passado para a função ou o PHP reclamará. Isso significa que esta verificação pode ser abreviada para if ($chunk)(para ver se ela é falsamente ou "vazia"). Mas, se $chunknão contiver nada, nada acontecerá mesmo. Portanto, todo este corpo de função pode ser abreviado para return $string . $chunk. O que significa que toda essa função é bastante desnecessária.
deceze
1
Você pode ter uma variável definida, mas também pode estar vazia. Por exemplo, uma variável com o valor "" está vazia, mas também definida.
Aaron
1
Sim, mas estou dizendo que sua função é uma forma muito prolixa de escrever $foo . $bar. Eu o desafio a encontrar qualquer caso importante em que sua função faça algo diferente. :)
deceze
3

Eu sei que isso foi perguntado / respondido há algum tempo, mas fornecendo esta resposta porque é funcionalmente equivalente, apesar de não ser um operador de atribuição e ninguém comentar sobre seu uso para concatenação geral de strings.

Você pode querer olhar para o uso da família sprintf( documentação ) de funções para concatenação de strings. Ele fornece muito mais higienização e usabilidade do que apenas combinar duas strings com operadores de atribuição.

$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" */

Eu normalmente uso vsprintf, já que trabalhar com matrizes é mais fácil de gerenciar posições de valor do que argumentos individuais.

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

Também com uma matriz de valores, pode-se simplesmente implodeo conjunto de valores resultante para concatenação de string simples.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */
fyrye
fonte
Infelizmente, não acho que sprintf () seja tão rápido quanto concats simples. E certamente não parece tão compatível com a sintaxe também. Consulte: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Correto, embora não tenha certeza de como você entende por amigável de sintaxe. Embora não seja tão rápido ou simplista quanto a concatenação. sprintfé comumente usado em vários idiomas. sprintftem seu lugar e propósito sobre quando usá-lo. por exemplo. a conversão de vários valores ou a aplicação de uma série de entradas usando sprintf, fornece mais funcionalidade do que a simples concatenação, quando necessário . Veja: 3v4l.org/8PWil Mas não deve ser usado como um substituto completo para a concatenação.
fyrye,
3

Você pode encapsular a função incorporada substr_replace, onde os argumentos $ start e $ length podem ser definidos como 0, que precede $ substituição para $ string e retorna o resultado, assim:

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

Um exemplo de uso da função auxiliar seria:

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

Se você gosta de programação procedural, claro.

sde-simon
fonte
Não vejo interesse em usar substr_replace; fazer um simples $string = $prefix.$string;na função fará o truque.
Pierre-Olivier Vares
2

Transformando o comentário de Blakethepatton em uma resposta (obrigado), uma maneira de fazer isso de forma mais organizada para nomes de variáveis ​​mais longos é usar uma referência à variável da seguinte maneira:

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

Isso vai poupar você de digitar a resposta de Eric V se o nome da variável original tiver 12 caracteres ou mais.

Uma alternativa em uma linha:

$f = 'bar' . ($f = &$foo);
Robrecord
fonte