【发布时间】:2014-09-07 06:51:06
【问题描述】:
我正在尝试在多维数组中搜索部分字符串。我的数组如下所示:
$data = array(
"United Kingdom" => array(
"AFXX0001" => "Nottingham",
"AFXX0002" => "Notting Hill",
),
"Germany" => array(
"ALXX0001" => "Garnottheinem",
"ALXX0002" => "Tirane",
),
);
我正在尝试构建一个搜索功能,该功能将显示满足部分匹配要求的所有结果。到目前为止,我的函数如下所示:
function array_find( $needle, $haystack )
{
foreach ($haystack as $key => $array) {
foreach ( $array as $key2 => $value ) {
if (false !== stripos($needle, $value)) {
$result = $key . ' ' . $value . ' ' . $key2;
return $result;
}
}
}
return false;
}
它有效,但前提是我输入实际值,例如array_find( 'Nottingham', $data );。
如果我这样做array_find( 'nott', $data );,我希望它返回诺丁汉、诺丁山和加诺特海内姆,但它却返回bool(false)。
【问题讨论】:
-
即使它确实找到了匹配项,您也只会返回第一个结果,因为您在找到匹配项时返回。我建议查看 array_filter 以使用您自己的比较函数获得多个结果。 stripos 对于部分匹配应该可以正常工作,或者您可以使用某种模糊的“听起来像”功能,例如 levenshtein