为分隔字符串中的每个值添加字符

问题描述 投票:0回答:9

我正在尝试使用像

php,mysql,css

这样的字符串 然后把它变成
#php #mysql #css

到目前为止我所拥有的:

$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);

foreach($hashTags as $k => $v){
    $hashTagsStr = '';
    $hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;

问题是它只打印

#css

php prefix delimited
9个回答
9
投票

这个怎么样:

$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
$hashTagStr = '#' . implode( ' #', $hashTags );

...或:

$hashTagStr  = "php,mysql,css";
$hashTagStr = '#' . str_replace( ',', ' #', $hashTagStr );

6
投票

那是因为每次循环运行时,您都会通过执行以下操作来清除 $hashTagsStr:

$hashTagsStr = '';

更改为:

$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
$hashTagsStr = '';
foreach($hashTags as $k => $v){
    $hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;

4
投票

通过引用传递您的值:

$hashTags = array("php","mysql","css");

foreach ( $hashTags as &$v ) $v = "#" . $v;

然后敲定结果:

// #php #mysql #css
echo implode( " ", $hashTags );

演示:http://codepad.org/zbtLF5Pk

让我们检查一下您在做什么:

// You start with a string, all good.
$hashTagStr = "php,mysql,css";

// Blow it apart into an array - awesome!
$hashTags = explode( "," , $hashTagStr );

// Yeah, let's cycle this badboy!
foreach($hashTags as $k => $v) {

    // Iteration 1: Yeah, empty strings!
    // Iteration 2: Yeah, empty...wait, OMG!
    $hashTagsStr = '';

    // Concat onto an empty var
    $hashTagsStr .= '#'.$v.' ';
}

// Show our final output
echo $hashTagsStr;

3
投票

看起来像是

array_walk

的工作
$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
array_walk($hashTags, function(&$value){ $value = "#" . $value ;} );
var_dump(implode(" ", $hashTags));

输出

 string '#php #mysql #css' (length=16)

2
投票

您应该将

$hashTagsStr = ''
行移到 foreach 循环之外,否则每次都会重置它


1
投票

您正在循环内定义变量

$hashTagsStr

<?php

$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);

$hashTagsStr = '';
foreach($hashTags as $k => $v){
    $hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;

无论如何,我认为这会更简单:

<?php

$hashTagStr  = "php,mysql,css";
$hashTagStr = '#' . str_replace(',', ' #', $hashTagStr);

echo $hashTagStr;

1
投票

在循环的每次迭代期间,您都在做

$hashTagsStr = '';
。这是将变量设置为
''
,然后附加当前标签。因此,完成后,
$hashTagsStr
将仅包含最后一个标签。

此外,循环在这里似乎工作量太大,您可以更轻松地将

,
替换为
#
。无需将其分解为数组,无需循环。试试这个:

$hashTagStr  = "php,mysql,css";
$hashTagStr = '#'.str_replace(',', ' #', $hashTagStr);

0
投票
function prepend( $pre, $array )
{
    return array_map(
        function($t) use ($pre) { return $pre.$t; }, $array
    );
}

字符串中的语义是一个数组。 ➪ 所以最好尽快爆炸,并尽可能长时间地继续使用您的阵列。

闭包和匿名函数如图所示在 PHP 5.4+ 中工作。


0
投票

请小心实施不会将

#
添加到空数组的解决方案。一个好的通用解决方案也不应该创建不必要的尾随空格。理想情况下,无论分隔值字符如何,强大的通用解决方案都应该有效。

这永远不会生成任何不需要的字符。通过分隔符分割值,使用 substr_replace() 在每个值前面添加

#
,然后用空格重新连接。

代码:(演示

echo implode(
         ' ',
         substr_replace(
             explode(',', $hashTagStr),
             '#',
             0,
             0
         )
     );
© www.soinside.com 2019 - 2024. All rights reserved.