2
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 变量。每次连接都不是几次。

4

6 回答 6

21

您可以使用 join 或 implode,两者都做同样的事情,正如您所说,它需要是一个不难的数组

join($glue, array($va1, $var2, $var3));
于 2009-07-19T21:31:36.773 回答
8

您可以使用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您附加到函数名称的要短。

于 2009-07-19T21:58:47.467 回答
3

试试这个:

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;
}

编辑:由于评论建议改进了功能

于 2009-07-19T21:52:17.230 回答
2
$a="hi";
$b = " world";
echo $a.$b;
于 2009-07-19T21:30:53.593 回答
0

虽然我同意接受的答案,但请参阅这篇文章,即 implode 比 join 更快。

于 2009-07-20T08:58:36.433 回答
-1

您必须使用点“。” 操作员。这来自抽象代数理论,字符串是关于连接运算符的幺半群,以及在处理代数结构时,点通常用作通用运算符(另一个是“+”,您可能已经看到用于其他语言)。

为了快速参考,作为一个幺半群意味着操作的关联性,并且存在一个标识元素(在我们的例子中是空字符串)。

于 2009-07-19T21:38:54.217 回答