PHP中连接字符串的最佳方法,带有空格的连接方式。

13

我需要将数量不确定的字符串连接起来,并且希望两个相邻字符串之间有一个空格。例如:a b c d e f

同时,我不想要任何前导或后续空格,请问PHP中最好的方法是什么?


你是如何存储这些字符串的?它们是在一个数组中还是分别存储在不同的变量中? - kapa
@freshest 变量是如何生成的?难道不能将值放入数组而不是自由变量吗? - deviousdodo
它们来自数据库,因此有些是NULL或空字符串。 - freshest
1
1- 对于标题中的“最佳” - Your Common Sense
1
然后,当您迭代数据库行并将变量放入数组中时,只需构建字符串数组,并仅在它们不为空时将变量放入数组中(然后您可以执行implode操作)。如果您不确定如何执行此操作,请在此处添加该代码。 - deviousdodo
显示剩余2条评论
6个回答

37
你的意思是 $str = implode(' ', array('a', 'b', 'c', 'd', 'e', 'f')); 吗?

6

简单的方法是:

$string="hello" . " " . "world";

4
$strings = array( " asd " , NULL, "", " dasd ", "Dasd  ", "", "", NULL );

function isValid($v){
return empty($v) || !$v ? false : true;
}

$concatenated = trim( implode( " ", array_map( "trim", array_filter( $strings, "isValid" ) ) ) );

//"asd dasd Dasd"

4
function concatenate()
{
    $return = array();
    $numargs = func_num_args();
    $arg_list = func_get_args();
    for($i = 0; $i < $numargs; $i++)
    {
        if(empty($arg_list[$i])) continue;
        $return[] = trim($arg_list[$i]);
    }
    return implode(' ', $return);
}

echo concatenate("Mark ", " as ", " correct");

4

我想要补充一下deviousdodo的回答。如果数组中包含空字符串,并且你不希望它们出现在连接的字符串中,例如 "a,b,,d,,f",那么最好使用以下方式:

$str = implode(',', array_filter(array('a', 'b', '', 'd', '', 'f')));


2
考虑到您已经将这些字符串收集到一个数组中,一种方法是通过foreach语句实现,例如:
$res = "";
foreach($strings as $str) {
   $res.= $str." ";
}

if(strlen($res > 0))
    $res = substr($res,-1);

通过这种方式,您可以控制未来更改的过程。


3
当你拥有implode()函数时,这听起来过于复杂了。 - kapa
我知道,但通常我喜欢让事情保持开放和可控,这样我就可以随时更改当我面对未知数据类型时,因为现在它是一个字符串数组,但你永远不知道在开发过程中会出现什么,所以我喜欢拥有那种自由。只要我确定了一些东西,我总是有时间将其更改为简单的implode / join。 - holographix
1
你的解决方案(使用 foreach)假设字符串在一个数组中。使用 implode 也会假设字符串在一个数组中。我看不到这里的自由,只看到一堆不必要的代码行,降低了可读性。 - kapa
这让我有自由地拥有任何对象的字符串并更改循环语句的内部,仅此而已。当然,这只是用于原型问题,当您确定正确时,如果它将是字符串数组,显然您会选择更花哨且消耗更少的解决方案,例如implode或join。 - holographix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接