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(),它在数组上运行 - 所以我必须首先将字符串添加到数组中,然后内爆。
是否已存在完成此操作的方法,或者我是否需要从头开始创作?
注意:我熟悉连接(。)和构建连接(。=)。我不想这样做(这将发生在函数内)。我的意图是只写一次$ glue变量。每次连接都不会多次。
答案 0 :(得分:21)
你可以使用join或implode,两者都做同样的事情 正如你所说它需要是一个不难的数组
join($glue, array($va1, $var2, $var3));
答案 1 :(得分: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
短。
答案 2 :(得分: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;
}
编辑:感谢评论建议改进了功能
答案 3 :(得分:2)
$a="hi";
$b = " world";
echo $a.$b;
答案 4 :(得分:0)
虽然我同意接受的答案,但请参阅article,其中说implode比加入更快。
答案 5 :(得分:-1)
你必须使用点“。”运营商。 这来自抽象代数理论,字符串是关于连接运算符的幺半群,以及当处理代数结构时,点通常用作通用运算符(另一个是“+”,您可能已经看过用于其他语言)。
为了快速参考,作为一个monoid意味着操作的关联性,并且存在一个identity元素(在我们的例子中是空字符串)。