1

我正在遍历一个关联数组,并尝试将针数组中的整个单词匹配到 haystack 数组中。以下代码完美运行,但返回太多结果,因为它匹配任何出现的字符串:

$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

您在这里使用了两对分隔符

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

使用/'
我会说单引号是多余的,是匆忙复制和粘贴的结果。

此外,preg_quote对于内容/单词,如果它可能包含其中任何一个。


正如埃利亚斯指出的那样;下一个陷阱可能是尝试使用长内容变量作为搜索参数。如果您没有给变量提供无意义的枚举名称,这将是一个明显的错误。

其中只有一个可能是实际的单词或名称。另一个应该称为内容或其他东西:

    $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 回答