我正在尝试使用像...这样的字符串。
php,mysql,css
并将其转换为.. #php #mysql #css
到目前为止我所拥有的......
$hashTagStr = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
foreach($hashTags as $k => $v){
$hashTagsStr = '';
$hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;
?>
问题是它只打印#css
答案 0 :(得分:7)
这个怎么样:
$hashTagStr = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
$hashTagStr = '#' . implode( ' #', $hashTags );
...或:
$hashTagStr = "php,mysql,css";
$hashTagStr = '#' . str_replace( ',', ' #', $hashTagStr );
答案 1 :(得分:6)
那是因为每次循环运行时你都会通过以下方式清除$ hashTagsStr:
$hashTagsStr = '';
将其更改为:
$hashTagStr = "php,mysql,css";
$hashTags = explode(",", $hashTagStr);
$hashTagsStr = '';
foreach($hashTags as $k => $v){
$hashTagsStr .= '#'.$v.' ';
}
echo $hashTagsStr;
答案 2 :(得分: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 :(得分: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)
答案 4 :(得分:2)
您应该将$hashTagsStr = ''
行移到foreach循环之外,否则每次都将其重置
答案 5 :(得分: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;
答案 6 :(得分:1)
在循环的每次迭代中,您正在执行$hashTagsStr = '';
。这是将变量设置为''
,然后附加当前标记。因此,完成后,$hashTagsStr
将只包含最后一个标记。
此外,循环似乎在这里工作太多,您可以更轻松地将,
替换为#
。无需将其分解为aray,无需循环。试试这个:
$hashTagStr = "php,mysql,css";
$hashTagStr = '#'.str_replace(',', ' #', $hashTagStr);
答案 7 :(得分:0)
function prepend( $pre, $array )
{
return array_map(
function($t) use ($pre) { return $pre.$t; }, $array
);
}
您在字符串中语义的内容是一个数组。 ➪尽可能快地爆炸,并尽可能长时间地继续使用阵列。
Closures & anonymous functions如PHP 5.4中所示。