我有一个PHP函数,可以很好地使用键-值对搜索多维关联数组。现在我想扩展它,以搜索具有类似于SQL的结构的键值对的数组,例如: name = '%john%'
。
function search($array, $key, $value)
{
$results = array();
like_search_r($array, $key, $value, $results);
return $results[0];
}
function like_search_r($array, $key, $value, &$results)
{
if (!is_array($array)) {
return;
}
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
like_search_r($subarray, $key, $value, $results);
}
}
我在这里找到了一个很好的例子(使用PHP从类似于SQL LIKE'%search%'的数组中过滤值),但它只能搜索一维数组。这个例子中的关键是preg_grep,但我还没有弄清楚如何在多维关联数组中使用它。任何帮助都将不胜感激。
编辑后:我希望能够传递一个键值对的数组来进行类似sql的筛选,原始要求仍然相同。过滤器必须支持类似于sql的'%like%',不需要输入,当匹配组合满足时返回根数组。如果键/值对不匹配,则忽略并继续下一个键/值对。我的输入数组如下:
array('FIRST_NAME'=>'ma','MIDDLE_NAME'=>'bill',
'LAST_NAME'=>'jo','ALIASES'=>'phil',
'DOB'=>'2017-07-05','COUNTRY_OF_BIRTH'=>'Jamaica',
'Countries1'=>array(array('COUNTRY_CODE'=>'JM'),array('COUNTRY_CODE'=>'AL')),
'Countries2'=>array(array('COUNTRY_CODE'=>'JM'),array('COUNTRY_CODE'=>'AL')));
这里可以找到要过滤的示例数组:https://www.tehplayground.com/dIMKbb6Tcw5YU38R
foreach ($inputArray ...) like_search_r(...)
。 - colburton