我正在循环关联数组并尝试将针阵列中的整个单词与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;
}
}
}
我得到一个空数组。任何使最后一段代码工作的帮助都会很棒。
谢谢, 格雷格
答案 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