2017-01-18 3 views
1

Ich habe eine Funktion, die über ein Array in PHP iterieren und alle nach einem Wert suchen wird.PHP Array für partielle oder exakte Übereinstimmung suchen

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

Also ich habe es funktioniert für vollständige/genaue Übereinstimmungen. Aber ich muss auch auf teilweise Übereinstimmungen testen, wo ich jetzt verloren bin. Zum Beispiel, wenn jemand nach "Dall" und "Dallas" innerhalb des Arrays sucht, muss er auch dort ein positives zurückgeben.

Was fehlt mir dabei?

Array wie folgt aussieht:

[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

ich strpos würde einen Versuch – nfo

+0

Typo - in_array_r soll checkarrayvalues ​​sein – user7355700

+0

Ja, es geht rekursiv durch das Array, um nach dem Begriff zu suchen. – user7355700

Antwort

0

Verwenden Sie die folgende erweiterte Lösung mit strpos, stripos und call_user_func Funktionen:

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 
Verwandte Themen