Qualsiasi equivalente a. = Per l'aggiunta all'inizio della stringa in PHP?


104

Mi chiedo solo se c'è qualcosa come. = Per aggiungere del testo all'inizio di una stringa, ad esempio:

$foo =. 'bar';

che non funziona.

Modifica: originariamente era un esempio $foo =. $bar;che può essere ottenuto con$bar .= $foo;


Garantisco per James 'anche se avrebbe dovuto scrivere una risposta per questo ...
Christian

6
Questo si aggiunge $fooa $bar, invece di anteporre $bara $foo. Il risultato è simile, ma credo che voglia mutare $foo.
Eric V

Doveva essere un commento ironico (motivo per cui è un commento, non una risposta)!
James Allardice

1
ugh ... scusa, cattivo esempio ... risolto ora :)
yuttadhammo

Risposte:



4

Puoi sempre creare la tua funzione per questo:

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

$string sarebbe il pezzo che vuoi anteporre e $chunk sarebbe il testo a cui vuoi anteporre qualcosa.

Si potrebbe dire che i controlli sono facoltativi, ma inserendoli non è necessario preoccuparsi di passare un valore nullo per errore.


1
Grazie, hai ragione però. Sicuramente non è così facile o veloce come qualcosa di integrato. Sentiti libero di copiare e incollare se questo aiuta a renderlo più facile: D
Aaron

7
Se qualcosa è !emptyè anche sempre isset, non c'è bisogno di questo doppio controllo. Inoltre, poiché $chunkè un parametro obbligatorio della funzione, deve essere passato alla funzione o PHP si lamenterà. Ciò significa che questo controllo può essere abbreviato in if ($chunk)(per vedere se è falso aka "vuoto"). Ma, se $chunknon contiene nulla, non accadrà comunque nulla. Quindi l'intero corpo della funzione può essere abbreviato in return $string . $chunk. Il che significa che l'intera funzione è abbastanza inutile.
inganno

1
È possibile impostare una variabile ma anche essere vuota. Ad esempio, una variabile con il valore "" è vuota ma anche impostata.
Aaron

1
Sì, ma sto dicendo che la tua funzione è un modo molto prolisso di scrivere $foo . $bar. Ti sfido a trovare qualsiasi caso importante in cui la tua funzione fa qualcosa di diverso. :)
inganno

3

So che è stato chiesto / risposto qualche tempo fa, ma fornendo questa risposta in quanto è funzionalmente equivalente nonostante non sia un operatore di assegnazione e nessuno abbia commentato il suo utilizzo per la concatenazione generale di stringhe.

Potresti voler esaminare l'uso della famiglia di funzioni sprintf( documentazione ) per la concatenazione di stringhe. Fornisce molta più sanificazione e usabilità rispetto alla semplice combinazione di due stringhe con operatori di assegnazione.

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

Normalmente lo uso vsprintf, poiché lavorare con gli array è più facile da gestire le posizioni dei valori rispetto ai singoli argomenti.

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

Inoltre, con un array di valori, è possibile semplicemente implodel'insieme di valori risultante per una semplice concatenazione di stringhe.

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

Sfortunatamente, non penso che sprintf () sia veloce come i semplici concatenati. E di certo non sembra neanche lontanamente compatibile con la sintassi. Vedi: stackoverflow.com/q/7147305/2430549
HoldOffHunger

Corretto, anche se non sono sicuro di come intendi per sintassi amichevole. Anche se non è così veloce o semplicistico come la concatenazione. sprintfè comunemente usato in più lingue. sprintfha il suo posto e il suo scopo su quando usarlo. per esempio. il casting di più valori o l'applicazione di un numero di input utilizzando sprintf, fornisce più funzionalità rispetto alla semplice concatenazione quando è richiesta . Vedi: 3v4l.org/8PWil Ma non dovrebbe essere usato come sostituto completo della concatenazione.
fyrye

3

Puoi racchiudere la funzione incorporata substr_replace, in cui gli argomenti $ start e $ length possono essere impostati su 0, che antepone la $ sostituzione a $ string e restituisce il risultato, in questo modo:

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

Un esempio di utilizzo della funzione di supporto potrebbe essere:

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

Se ti piace la programmazione procedurale, questo è.


Non vedo l'interesse nell'usare substr_replace; fare un semplice $string = $prefix.$string;nella funzione farà il trucco.
Pierre-Olivier Vares

2

Trasformando il commento di Blakethepatton in una risposta (grazie), un modo per farlo in modo più ordinato per nomi di variabili più lunghi è utilizzare un riferimento alla variabile come segue:

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

Ciò ti eviterà di digitare la risposta di Eric V se il nome della variabile originale è di 12 caratteri o più.

Un'alternativa su una riga:

$f = 'bar' . ($f = &$foo);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.