2017-01-18 3 views
1

У меня есть функция, которая будет перебирать массив в PHP и все, чтобы найти значение.PHP Поиск массива для частичного или точного соответствия

function checkarrayvalues($term, $arr, $strict = false) { 
foreach ($arr as $item) { 
    if (($strict ? $item === $term : $item == $term) || (is_array($item) && checkarrayvalues($term, $item, $strict))) { 
     return true; 
    } 
} 

Поэтому у меня есть работа для полных/точных совпадений. Но мне также нужно проверить частичные совпадения, в которых я теперь потерян. Например, если кто-то ищет «Далл» и «Даллас», существует внутри массива, он также должен вернуть положительный результат.

Что мне не хватает в том, как это сделать?

массив выглядит следующим образом:

[Beau Rivage Resort & Casino] => Array 
      (
       [name] => Beau Rivage Resort & Casino 
       [nid] => 100 
       [alias] => /BeauRivage 
       [guestrooms] => 1740 
       [meetingrooms] => 16 
       [largestmr] => 17000 
       [totalms] => 50000 
       [picture] => /2016-12/Beau-Rivage-Fallen-Oak-Golf-Course_0.jpg 
       [region] => SE 
       [segment] => GC 
       [city] => Biloxi 
       [state] => MS 
       [longstate] => mississippi 
       [address] => 875 Beach Boulevard 
       [zip] => 39530 
       [country] => United States of America 
       [distance] => 21.00 
      ) 

     [Bellagio] => Array 
      (
       [name] => Bellagio 
       [nid] => 103 
       [alias] => /Bellagio 
       [guestrooms] => 3933 
       [meetingrooms] => 50 
       [largestmr] => 45000 
       [totalms] => 200000 
       [picture] => /2016-12/Bellagio-exterior.jpg 
       [region] => SW 
       [segment] => BB 
       [city] => Las Vegas 
       [state] => NV 
       [longstate] => nevada 
       [address] => 3600 Las Vega Boulevard South 
       [zip] => 89109 
       [country] => United States of America 
       [distance] => 10.00 
      ) 
+1

Я дал бы StrPos попробовать – nfo

+0

опечатку - in_array_r должен быть checkarrayvalues ​​ – user7355700

+0

Yep - он рекурсивно проходит массив, чтобы найти этот термин. – user7355700

ответ

0

Используйте следующий расширенный раствор с strpos, stripos и call_user_func функции:

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

$arr = [ 
    ['Dallas', 'New York'] 
]; 

var_dump(checkarrayvalues('dall', $arr, true, true)); // false 
var_dump(checkarrayvalues('dall', $arr, false, true)); // true 
var_dump(checkarrayvalues('york', $arr, false, true)); // true 
var_dump(checkarrayvalues('york', $arr, false));  // false 
Смежные вопросы