【发布时间】:2018-04-17 22:28:21
【问题描述】:
我有一个多维数组。我想使用其中的单字或双字在数组中搜索并返回包含任何匹配字的数组...
这是我的示例数组:
$array = array(
array('First_name' => 'Dina', 'Last_Name' => 'Gomez', 'Location' => 'Los Angeles, CA', 'Work' => 'Youtube Service')
array('First_name' => 'Lopa', 'Last_Name' => 'Mitchel', 'Location' => 'New York, NY', 'Work' => 'Works with Mark')
array('First_name' => 'Mark ', 'Last_Name' => 'Nailson Jr.', 'Location' => 'Dallas, USA', 'Work' => 'SEO Industry')
array('First_name' => 'Jenna', 'Last_Name' => 'Gomez', 'Location' => 'Florida, CA', 'Work' => 'Work at Youtube')
);
现在如果有人搜索“Gomez”,那么它应该返回第一个和最后一个数组..我可以使用 in_array() 来做到这一点,但问题是,我 in_array() 只返回完全匹配。我也想要部分匹配的内容.. 比如如果有人搜索 "Mark Gomez" 那么它应该返回第一个数组,"Gomez" 的最后一个数组和 "Gomez" 的第二个和第三个数组strong>"Mark" .. 第二个数组在 Work Key 处有 "Mark" 字。
我从另一个 stackoverflow 答案中收集了一个函数.. 它仅适用于完全匹配.. 或仅适用于某些键..
function checkarrayvalues($term, $arr, $strict = false, $partial = false) {
if ($partial) { // whether it should perform a partial match
$fn = ($strict) ? "strpos" : "stripos";
}
foreach ($arr as $item) {
if (is_array($item)) {
if (checkarrayvalues($term, $item, $strict, $partial))
return true;
} elseif (($partial && call_user_func($fn, $item, $term) !== false)
|| ($strict ? $item === $term : $item == $term)) {
return true;
}
}
return false;
}
var_dump(checkarrayvalues($query, $results, false, true));
我也尝试了array_search 函数:( 没有运气。
请帮忙:(
【问题讨论】:
-
您研究过 ElasticSearch 吗?这是它擅长的。
-
您的函数
checkarrayvalues()返回一个布尔值。您要返回数据还是布尔值? -
目前我想要布尔值.. 但我稍后会用它来显示数据并且我知道该怎么做
-
@IAmStack 这个问题你还需要答案吗?
-
@Syscall .. 目前我正在使用另一种方法.. 在此处查看我的代码:http://prntscr.com/j71luo 但如果您有任何简单方便的方法,请分享