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
    );
}

文字列に意味的に含まれているのは配列です。➪できるだけ早く爆発させ、できるだけ長くアレイで作業を続けてください。

示されているクロージャと無名関数は、PHP5.4以降で機能します。

于 2015-10-25T07:46:53.523 に答える