PHP - preg_match来自关联数组的整个单词,使用stristr而不是preg_match

时间:2012-07-10 16:34:21

标签: php regex arrays foreach preg-match

我正在循环关联数组并尝试将针阵列中的整个单词与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;
        }
    }
}

我得到一个空数组。任何使最后一段代码工作的帮助都会很棒。

谢谢, 格雷格

2 个答案:

答案 0 :(得分:1)

您在这里使用两对delimiters

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

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

如果内容/字可能包含任何内容/字,则preg_quote


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

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

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

以后使用这些 在此期间,还要相应地修复对象属性命名。

答案 1 :(得分:1)

真的很简单。感谢php中的一些怪癖,stristr语法如下:

stristr($haystack,$needle);

preg_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