2013-11-15 4 views
1

У меня есть многомерный массив вроде этого:PHP - поиск/фильтровать многомерный массив по строке (ы)

$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'), 
    ); 

Как я передать строки поиска, такие как «Джон», чтобы затем иметь массив $ testarray содержат только первый и последний массив ?.

Мне нужно передать поисковый запрос, который возвращает весь подмассив, если какое-либо из значений ключей содержит эту строку.

также, если я передаю «Джек Джонсон», $ testarray должен содержать только последний массив.

  • Возможно ли это, или я собираюсь сделать это неправильно? Как нормальный результат поиска работает для баз данных?

Я смотрел много страниц переполнения стека (и руководство по PHP или Google), но ничего не помогло мне, если я отправил что-то, что уже имеет ответ, прокомментируйте мне ссылку.

Thank you soo много!

+0

Массив вы даете полный синтаксических ошибок – aarryy

ответ

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

Я не проверял это, но это должно работать ...

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; 
} 
+0

я попытался это, и она работала хорошо, за исключением была проблема (для меня), что существует ограничение на количество символов, которые вы можете протестировать в fnmatch ... поэтому, если вы пытаетесь найти элемент массива с более чем 260 символами, он выдает ошибку. – Dog

Смежные вопросы