PHP - 按字符串搜索/过滤多维数组

时间:2013-11-15 17:54:41

标签: php multidimensional-array filter

我有一个像这样的多维数组:

$testarray = array(
    array(
        'First name' => 'Johnny',
        'Last name' => 'Milthers',
        'Age' => '24'
    ),
    array(
        'First name' => 'Toby',
        'Last name' => 'Thomson',
        'Age' => '25'), 
    ),
    array(
        'First name' => 'Jack',
        'Last name' => 'Johnson',
        'Age' => '25'),
    );

如何传递搜索字符串(如'John'),然后让数组$ testarray只包含第一个和最后一个数组?

我需要传递一个搜索词,如果任何键值包含该字符串,则返回整个子数组。

如果我通过“杰克约翰逊”,$ testarray应该只包含最后一个数组。

  • 这是可能的,还是我错误的方式? 普通搜索结果如何为数据库工作?

我一直在看很多堆栈溢出页面(和PHP手册+谷歌),但没有任何帮助我,如果我发布已经有答案的东西,请评论我的链接。

非常感谢你!

2 个答案:

答案 0 :(得分:2)

这是实现目标的一种方法,请记住,只有搜索数组直接嵌套在外部搜索数组中时才会有效。

function search_array($text, $array) {
    return array_filter($array, function($a) use($text){

       return stristr(implode(" ", $a), $text);

    });
}

http://sandbox.onlinephpfunctions.com/code/09e1187ccedba0804de5d797c350e218b05951cd

答案 1 :(得分:1)

我没有测试过这个,但这应该有用......

function find_in_array($search, $testarray) {
  $pattern = '*'.$search.'*';
  $array = array_filter($testarray, function($entry) use ($pattern) {
    foreach($entry as $key=>$value) {
      if (fnmatch($pattern, $value)) return true;
    }
    return false;
  });
  return $array;
 }