1

以下の配列のようなキーワードのリストを使用します。

$keywordlist = array(
    'Apple iPhone' => 'http://www.example.com/apple/iphone/',
    'Apple iPad' => 'http://www.example.com/apple/ipad',
    'Samsung Galaxy Ace' => 'http://www.example.com/samsung/galaxy-ace',
    'Samsung Galaxy Nexus' => 'http://www.example.com/samsung/galaxy-nexus',
    'Samsung' => 'http://www.example.com/samsung/',
    'Apple' => 'http://www.example.com/apple/'
);

キーワードを関連する URL に置き換えたいと考えています。

それらをループして and を使用しようとしましstr_replacepreg_replaceが、これはすべてのキーワードのメーカー名を置き換えているため、すべてのキーワードが「Samsung」と「Apple」のリンクに変わります。私は次にどこに向かうべきかについて少し困惑しています、誰か何か指針を持っていますか?

編集:

以下のコードを使用してループスルーしました-

foreach($keywordlist as $name => $link){ 
    $content = str_replace($name, '<a href="'.$link.'">'.$name.'</a>', $content);
}

解決:

問題は、置き換えていたリンク テキストにあると思います。その後、同様のキーワードを持つ他のフレーズに再び置き換えられました。以下が機能するようになりました。

これを行うためのより良い方法を考えている人はいますか?

$content = "<p>This Apple iPhone is from Apple</p>
            <p>This Apple iPad is from Apple</p>
            <p>This Samsung Galaxy Ace is from Samsung</p>
            <p>This Samsung Galaxy Nexus is from Samsung</p>
            <p>This is a Samsung</p>
            <p>This is an Apple</p>";



$keywordlist = array(
    'Apple iPhone' => '[1]',
    'Apple iPad' => '[2]',
    'Samsung Galaxy Ace' => '[3]',
    'Samsung Galaxy Nexus' => '[4]',
    'Samsung' => '[5]',
    'Apple' => '[6]'
);

$content = str_replace(array_keys($keywordlist), array_values($keywordlist), $content);

$urllist = array(
    '[1]' => '<a href="http://www.example.com/apple/iphone/">Apple iPhone</a>',
    '[2]' => '<a href="http://www.example.com/apple/ipad">Apple iPad</a>',
    '[3]' => '<a href="http://www.example.com/samsung/galaxy-ace">Samsung Galaxy Ace</a>',
    '[4]' => '<a href="http://www.example.com/samsung/galaxy-nexus">Samsung Galaxy Nexus</a>',
    '[5]' => '<a href="http://www.example.com/samsung/">Samsung</a>',
    '[6]' => '<a href="http://www.example.com/apple/">Apple</a>'
);

$content = str_replace(array_keys($urllist), array_values($urllist), $content);

echo $content;

出力:

このApple iPhoneApple 製です

このApple iPadApple 製です

このSamsung Galaxy AceSamsung 製です

このSamsung Galaxy NexusSamsung 製です

これはサムスン

これはアップルです

4

3 に答える 3

1

str_replace()あなたが試みていることには十分なはずです。

foreach($keywordlist as $key => $link) {
     $content = str_replace($key, '<a href="$link">$key</a>', $content);
}

コメントしたように、キーでキーワードが重複しているため、これは期待どおりに機能しません。

キーを示すには、固定フォーマットが必要です。私が提案するのはとのようなもの[Apple]です[Apple iPad]。これに似たものを実装すると、内部に同じ内部コードが含まれていても、すべてのキーワードが異なります。

更新されたキーワード構造は、ワードの後で、このようになります。

$keywordlist = array(
    '[Apple iPhone]' => 'http://www.example.com/apple/iphone/',
    '[Apple iPad]' => 'http://www.example.com/apple/ipad',
    '[Samsung Galaxy Ace]' => 'http://www.example.com/samsung/galaxy-ace',
    '[Samsung Galaxy Nexus]' => 'http://www.example.com/samsung/galaxy-nexus',
    '[Samsung]' => 'http://www.example.com/samsung/',
    '[Apple]' => 'http://www.example.com/apple/'
);

この場合、すべてのキーワードテキストを。でラップする必要があるため、コンテンツの開発中の複雑さが大幅に増すため、オプションを使用することはできません[]

于 2012-07-09T09:20:42.657 に答える
0

あなたはこれを使うことができます:

$s = "this is a test";
$arr = array(
   "this" => "THIS",
   "a" => "A"
);

echo str_replace(array_keys($arr), array_values($arr),$s);

出力:

THIS is A test
于 2012-07-09T09:32:08.797 に答える
0

値と同じキーを持っているので、それは私には少し役に立たないように思えます。多分私はあなたの意図を誤解しています。しかし、ここに行きます:これにより、キーが値(URL)と同じになります

$newkeywordlist = array_combine (array_values($keywordlist),array_values($keywordlist));

http://nl.php.net/manual/en/function.array-combine.php

http://nl.php.net/manual/en/function.array-values.php

于 2012-07-09T09:22:28.610 に答える