1

連想配列をループして、針配列の単語全体を干し草の山配列に一致させようとしています。次のコードは完全に機能しますが、文字列のすべての出現に一致するため、返される結果が多すぎます。

$result = array();
$name1 = array();
$name2 = array();
foreach($object->organizations as $o) {
    foreach($objectCrunch as $o2) {
        $name1 = $o->name;
        $name2 = $o2->name;

        if(stristr($name2, $name1)) {
            $result[] = $o2->permalink;
        }
    }
}

次のコードを試すと:

$result = array();
$name1 = array();
$name2 = array();
foreach($object->organizations as $o) {
    foreach($objectCrunch as $o2) {
        $name1 = $o->name;
        $name2 = $o2->name;

        $pattern = "'/\b" . $name2 . "\b/i'";

        if(preg_match($pattern, $name1)) {
            $result[] = $o2->permalink;
        }
    }
}

空の配列を取得します。コードの最後の部分を機能させるための助けは素晴らしいでしょう。

ありがとう、グレッグ

4

2 に答える 2

1

ここでは、2 組の区切り記号を使用しています。

$pattern = "'/\b" . $name2 . "\b/i'";
            ||      
            1|
             2

またはのいずれ/かを使用します'
一重引用符は冗長であり、急いでコピーして貼り付けた結果だと思います。

また、preg_quoteどちらかが含まれている可能性がある場合は、コンテンツ/単語についても。


エリアスが指摘するように。次の落とし穴は、長いコンテンツ変数を検索パラメーターとして使用しようとすることです。変数に意味のない列挙型の名前を付けていなければ、これは明らかなエラーでした。

そのうちの 1 つだけが実際の単語または名前である可能性があります。もう 1 つは content または何かと呼ばれる必要があります。

    $word = $o->name;
    $textcontent = $o2->name;

今後はそれらを使用してください。
その際、それに応じてオブジェクト プロパティの命名も修正します。

于 2012-07-10T16:45:10.760 に答える
1

本当に簡単です。PHP のいくつかの癖のおかげで、stristr構文は次のようになります。

stristr($haystack,$needle);

whilepreg_matchの最初の引数は針として機能します。例:

$name1 = 'name of chief object';
$name2 = 'I am a child of name of chief object';
stristr($name2,$name1);//looks for 'name of chief object' in $name2

preg_match('/\b'.$name2.'\b/i',$name1);//does the exact oposite
于 2012-07-10T16:45:38.187 に答える