0

これで発生する問題は、配列$ wordstodeleteに単一の文字がある場合、$oneBigDescriptionの単語からそれらを削除することです。

$oneBigDescription = str_replace ( $wordstodelete, '', $oneBigDescription);

したがって、次のようになります。

array (size=51)
  'blck' => int 5
  'centrl' => int 6
  'clssc' => int 6
  'club' => int 10
  'crs' => int 54
  'deler' => int 7
  'delers' => int 5
  'engl' => int 6
  'felne' => int 8
  'gude' => int 5
  'hot' => int 5
  'jgur' => int 172
  'jgurs' => int 5
  'lke' => int 6

$ oneBigDescriptionから1文字だけを削除する方法はありますか?

4

3 に答える 3

2

$oneBigDescription = preg_replace("/\b$wordstodelete\b/", '', $oneBigDescription);

/b1つの文字が使用されている場合、単語の境界を探して、それが孤立した単語であることを確認する必要があります。

編集:その権利を完全に読んでいませんでした-これは、単語の配列として$wordstodeleteをループしていることを前提としています。

だから、このようなもの:

$desc = "blah blah a b blah";
$wordstodelete = array("a", "b");
foreach($wordstodelete as $delete)
{
    $desc= preg_replace("/\b$delete\b/", "", $desc);
}

EDIT2:これにはあまり満足していなかったので、少し洗練されました:

$arr = "a delete aaa a b me b";
$wordstodelete = array("a", "b");
$regex = array();
foreach($wordstodelete as $word)
{
    $regex[] = "/\b$word\b\s?/";
}
$arr = preg_replace($regex, '', $arr);

これは、次のスペースを削除するためのものです。HTMLでは、レンダリング時に通常は問題になりません(連続するスペースは通常レンダリングされないため)が、それでも削除することをお勧めします。これにより、前もって正規表現の配列も作成されますが、これは少し良いようです。

于 2012-07-21T12:54:01.283 に答える
0

少し正規表現を使用する必要があるようです

$oneBigDescription = preg_replace('/\sa\s/', ' ', $oneBigDescription);

これは「ブラックセントラル」を取り、「ブラックセントラル」を返します

于 2012-07-21T12:53:13.603 に答える
0

preg_replaceを使用して、次のように「単語自​​体」のみを置き換えることができます:(単語のリストを同じに保つことができるように正規表現を生成しています)

$wordsToReplace = ("a", "foo", "bar", "baz");
$regexs = array();
foreach ($wordsToReplace as $word) {

    $regexs[] = "/(\s?)". $word . "\s?/";
}

$oneBigDescription = preg_replace($regexs, '\1', $oneBigDescription);
于 2012-07-21T12:56:00.317 に答える