2

我正在尝试使用类似...的字符串

php,mysql,css 并把它变成..#php #mysql #css

我目前所拥有的...

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

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

?>

问题是它只打印#css

4

8 回答 8

8

这个怎么样:

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

...或者:

$hashTagStr  = "php,mysql,css";
$hashTagStr = '#' . str_replace( ',', ' #', $hashTagStr );
于 2012-05-10T21:10:37.463 回答
6

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

$hashTagsStr = '';

将其更改为:

$hashTagStr  = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
$hashTagsStr = '';
foreach($hashTags as $k => $v){
    $hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;
于 2012-05-10T21:10:14.430 回答
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;
于 2012-05-10T21:10:07.767 回答
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)
于 2012-05-10T21:13:31.560 回答
2

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

于 2012-05-10T21:10:09.373 回答
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;
于 2012-05-10T21:16:50.313 回答
1

在循环的每次迭代中,您正在执行$hashTagsStr = '';. 这是将变量设置为'',然后附加当前标记。因此,完成后,$hashTagsStr将只包含最后一个标签。

此外,循环似乎在这里工作太多,您可以更轻松地将 替换,#. 无需将其分解为数组,无需循环。尝试这个:

$hashTagStr  = "php,mysql,css";
$hashTagStr = '#'.str_replace(',', ' #', $hashTagStr);
于 2012-05-10T21:20:32.177 回答
0
function prepend( $pre, $array )
{
    return array_map(
        function($t) use ($pre) { return $pre.$t; }, $array
    );
}

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

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

于 2015-10-25T07:46:53.523 回答