Функция PHP для объединения строк? - PullRequest
2 голосов
/ 20 июля 2009
join_strings(string $glue, string $var, string $var2 [, string $...]);

Я ищу что-то похожее на функцию, которую я описал выше. Функциональным примером будет:

$title = "Mr.";
$fname = "Jonathan";
$lname = "Sampson";

print join_strings(" ", $title, $fname, $lname); // Mr. Jonathan Sampson

После того, как я быстро просмотрел документацию, я не увидел ничего, что могло бы это сделать. Самое близкое, что я могу придумать, это implode (), который работает с массивами, поэтому мне придется сначала добавить строки в массив, а затем выполнить implode.

Уже существует метод, позволяющий это сделать, или мне нужно написать его с нуля?

Примечание : Я знаком с конкатенацией (.) И конкатенацией зданий (. =). Я не хочу делать это (это будет происходить в рамках функции). Я собираюсь написать переменную $ glue только один раз. Не несколько раз с каждой конкатенацией.

Ответы [ 6 ]

21 голосов
/ 20 июля 2009

вы можете использовать соединение или взлет, оба делают одно и то же и, как вы говорите, это должен быть массив, который не сложен

join($glue, array($va1, $var2, $var3));
8 голосов
/ 20 июля 2009

Вы можете использовать func_get_args(), чтобы заставить implode() (или его псевдоним join()) подчиниться вашей воле:

function join_strings($glue) {
    $args = func_get_args();
    array_shift($args);
    return implode($glue, $args);
}

В качестве документации для func_get_args() примечания, однако:

Возвращает массив, в котором каждый элемент является копией соответствующего члена списка аргументов текущей пользовательской функции.

Таким образом, вы все равно в конечном итоге создаете массив из аргументов и затем передаете его, за исключением того, что теперь вы позволяете PHP позаботиться об этом за вас.

Есть ли у вас более убедительный пример, чем тот, который задан в вашем вопросе, чтобы оправдать не просто использование implode() напрямую?

Единственное, что вы сейчас делаете, избавляете себя от необходимости набирать array() вокруг переменных, но на самом деле это меньше, чем _strings, который вы добавили к имени функции.

3 голосов
/ 20 июля 2009

Попробуйте это:

function join_strings($glue, $arg){
   $args = func_get_args();
   $result = "";
   $argcount = count($args)
   for($i = 1; $i < $argcount; $i++){
       $result .= $args[$i];
       if($i+1!=count($args){
           $result .= $glue;
       }
   }
   return $result;
}

РЕДАКТИРОВАТЬ: улучшена функция благодаря предложению комментария

2 голосов
/ 20 июля 2009
$a="hi";
$b = " world";
echo $a.$b;
0 голосов
/ 20 июля 2009

Хотя я согласен с принятым ответом, см. Эту статью , в которой говорится, что взлет происходит быстрее, чем объединение.

0 голосов
/ 20 июля 2009

Вам придется использовать точку "." оператор. Это происходит из теории абстрактной алгебры, строки являются моноидами по отношению к оператору конкатенации, и тот факт, что при работе с алгебраическими структурами точка обычно используется как универсальный оператор (другой является «+», который вы, возможно, видели используется на других языках).

Для краткости, моноид подразумевает ассоциативность операции и наличие элемента идентичности (в нашем случае - пустой строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...