Будь-який еквівалент. = Для додавання до початку рядка в PHP?


103

Цікаво, чи є щось на зразок. = Для додавання тексту до початку рядка, наприклад:

$foo =. 'bar';

яка не працює.

Редагувати: спочатку приклад $foo =. $bar;можна досягти за допомогою$bar .= $foo;


Я поручаю Джеймса, хоча він повинен був написати відповідь на це ...
Крістіан

6
Яка додає $fooдо $bar, замість випереджаючи $barдо $foo. Результат подібний, але я думаю, що він хоче мутувати $foo.
Ерік V

Це малося на увазі трохи коментарями до язика (тому це коментар, а не відповідь)!
James Allardice

1
тьфу ... вибачте, поганий приклад ... виправлено зараз :)
yuttadhammo

Відповіді:



4

Ви завжди можете зробити власну функцію для цього:

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

$stringбула б частиною, яку ви хочете зробити попередньою, і $chunkбуде текстом, який ви хочете, щоб щось було наперед.

Ви можете сказати, що чеки необов’язкові, але, маючи це там, вам не потрібно турбуватися про те, щоб передати нульове значення випадково.


1
Дякую, ти прав. Це, безумовно, не так просто і швидко, як щось вбудоване. Сміливо копіюйте та вставляйте, якщо це допомагає зробити це простіше: D
Аарон

7
Якщо щось є, !emptyце також завжди isset, немає необхідності в цій подвійній перевірці. Крім того, оскільки $chunkце необхідний параметр функції, його потрібно передати функції або PHP поскаржиться. Це означає, що цю перевірку можна скоротити if ($chunk)(щоб побачити, чи фальшива вона також "порожня"). Але, якщо $chunkнічого не містить, все одно нічого не відбудеться. Таким чином, весь цей функціональний орган можна скоротити до return $string . $chunk. Це означає, що вся ця функція є досить непотрібною.
деге

1
Ви можете встановити змінну, але також бути порожньою. Наприклад, змінна зі значенням "" порожня, але також встановлена.
Аарон

1
Так, але я кажу, що ваша функція - дуже багатослівний спосіб писати $foo . $bar. Я закликаю вас знайти будь-який важливий випадок, якщо ваша функція робить щось інше. :)
деге

3

Я знаю, що це запитували / відповіли деякий час тому, але надаючи цю відповідь, оскільки вона функціонально рівнозначна, незважаючи на те, що вона не є оператором присвоєння, і ніхто не коментував її використання для загального об'єднання рядків.

Ви можете вивчити використання сімейства функцій sprintf( документація ) для об'єднання рядків. Це забезпечує набагато більше санітарної обробки та зручності використання, ніж просто поєднання двох рядків з операторами призначення.

$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

Правильно, хоча й не впевнено, як ви розумієте під синтаксисом. Хоча це не так швидко або спрощено, як конкатенація. sprintfзазвичай використовується на багатьох мовах. sprintfмає своє місце і призначення, коли його використовувати. напр. кастинг декількох значень або примусове використання ряду входів за допомогою sprintf, забезпечує вам більше функціональності, ніж просте з'єднання, коли це потрібно . Див.: 3v4l.org/8PWil Але він не повинен використовуватися як повна заміна конкатенації.
fyrye

3

Ви можете обернути вбудовану функцію substr_replace, де аргументи $ start та $ length можуть бути встановлені на 0, що передує заміні $ на $ 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;у функції зробить трюк.
П’єр-Олів'є Варес

2

Перетворивши коментар Blakethepatton у відповідь (спасибі), спосіб зробити це більш акуратно для довших імен змінних - за допомогою посилання на змінну наступним чином:

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

Це допоможе вам ввести відповідь Еріка V, якщо ваше початкове ім’я змінної становить 12 символів або більше.

Альтернатива на одній лінії:

$f = 'bar' . ($f = &$foo);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.