将字符前置到PHP中的项数组

时间:2012-05-10 21:08:58

标签: php

我正在尝试使用像...这样的字符串。

php,mysql,css 并将其转换为.. #php #mysql #css

到目前为止我所拥有的......     

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

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

?>

问题是它只打印#css

8 个答案:

答案 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中所示。