Zastanawiam się tylko, czy istnieje coś takiego jak. = Do dodawania tekstu na początku ciągu, np:
$foo =. 'bar';
co nie działa.
Edycja: pierwotnie był przykład, $foo =. $bar;który można osiągnąć za pomocą$bar .= $foo;
Zastanawiam się tylko, czy istnieje coś takiego jak. = Do dodawania tekstu na początku ciągu, np:
$foo =. 'bar';
co nie działa.
Edycja: pierwotnie był przykład, $foo =. $bar;który można osiągnąć za pomocą$bar .= $foo;
$foodo $bar, zamiast poprzedzenie $bardo $foo. Wynik jest podobny, ale myślę, że chce mutować $foo.
Odpowiedzi:
Zawsze możesz stworzyć własną funkcję do tego:
function prepend($string, $chunk) {
if(!empty($chunk) && isset($chunk)) {
return $string.$chunk;
}
else {
return $string;
}
}
$stringbyłby fragmentem, który chcesz wstawić na początku, i $chunktekstem, do którego chcesz coś dołączyć.
Można powiedzieć, że kontrole są opcjonalne, ale mając je w sobie, nie musisz się martwić o przypadkowe przekazanie wartości zerowej.
!emptyto też zawsze isset, nie ma potrzeby tego podwójnego sprawdzania. Ponadto, ponieważ $chunkjest to wymagany parametr funkcji, musi zostać przekazany do funkcji, w przeciwnym razie PHP będzie narzekać. Oznacza to, że to sprawdzenie można skrócić do if ($chunk)(aby sprawdzić, czy jest fałszywe, czyli „puste”). Ale jeśli $chunknic nie zawiera, i tak nic się nie stanie. Zatem cała ta część funkcji może być skrócona do return $string . $chunk. Co oznacza, że cała ta funkcja jest dość niepotrzebna.
$foo . $bar. Wzywam cię do znalezienia każdej ważnej sprawy, w której twoja funkcja robi coś innego. :)
Wiem, że zadawano to pytanie / udzielono odpowiedzi jakiś czas temu, ale udzielam tej odpowiedzi, ponieważ jest ona równoważna funkcjonalnie, mimo że nie jest operatorem przypisania i nikt nie skomentował jej użycia do ogólnej konkatenacji ciągów.
Możesz przyjrzeć się zastosowaniu rodziny funkcji sprintf( dokumentacji ) do konkatenacji ciągów. Zapewnia o wiele więcej oczyszczania i użyteczności niż zwykłe połączenie dwóch ciągów z operatorami przypisania.
$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" */
Zwykle używam vsprintf, ponieważ praca z tablicami jest łatwiejsza do zarządzania pozycjami wartości niż pojedynczymi argumentami.
$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */
Również w przypadku tablicy wartości można po prostu uzyskać implodewynikowy zestaw wartości dla prostej konkatenacji ciągów.
var_dump(implode('', array('bar', 'foo')));
/* string(6) "barfoo" */
sprintfjest powszechnie używany w wielu językach. sprintfma swoje miejsce i cel, kiedy go używać. na przykład. rzutowanie wielu wartości lub wymuszanie wielu danych wejściowych przy użyciu sprintfzapewnia większą funkcjonalność niż zwykła konkatenacja, gdy jest to wymagane . Zobacz: 3v4l.org/8PWil Ale nie powinno być używane jako kompletny zamiennik konkatenacji.
Możesz zawinąć wbudowaną funkcję substr_replace, w której argumenty $ start i $ length można ustawić na 0, co poprzedza zamianę $ na ciąg znaków $ i zwraca wynik, na przykład:
function prepend(& $string, $prefix) {
$string = substr_replace($string, $prefix, 0, 0);
}
Przykładowym zastosowaniem funkcji pomocniczej byłoby:
$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;
To znaczy, jeśli interesujesz się programowaniem proceduralnym.
$string = $prefix.$string;w funkcji załatwi sprawę.
Przechodząc komentarz Blakethepatton jest na odpowiedź (dziękuję), sposób to zrobić bardziej starannie dłużej nazw zmiennych jest za pomocą odwołania do zmiennej w następujący sposób:
$f = &$foo; $f = "bar{$f}";
Pozwoli to zaoszczędzić Ci wpisywania odpowiedzi Erica V, jeśli oryginalna nazwa zmiennej ma 12 znaków lub więcej.
Alternatywa w jednej linii:
$f = 'bar' . ($f = &$foo);