2009-11-13 8 views
20

Ich habe ein Array:entfernen Artikel aus dem Array, wenn es in einem ‚nicht zulässig Worte‘ Array existiert

Array 
(
    [0] => tom 
    [1] => and 
    [2] => jerry 
) 

Und ich habe auch eine Reihe nicht zulässig Worte:

Array 
(
    [0] => and 
    [1] => foo 
    [2] => bar 
) 

Was muss ich tun entfernt ein beliebiges Element im ersten Array, das auch im zweiten Array angezeigt wird. In diesem Fall müsste z. B. Schlüssel 1 entfernt werden, da sich "und" im Feld für unzulässige Wörter befindet.

Jetzt derzeit Ich habe diesen Code, der eine foreach auf den nicht anerkannten Worte tut und dann alle Übereinstimmungen finden verwendet array_search:

$arr=array('tom','and','jerry'); 
$disallowed_words=array('and','or','if'); 
foreach($disallowed_words as $key => $value) { 
    $arr_key=array_search($value,$array); 
    if($arr_key!='') { 
     unset($search_terms[$arr_key]); 
    } 
} 

Jetzt weiß ich, dieser Code saugt, will, was ich wissen, ob es ist eine effizientere Methode zum Entfernen und Element aus einem Array, wo es in einem anderen Array vorhanden ist, insbesondere wenn es die Verwendung einer Foreach negiert.

Vielen Dank, Ben

Antwort

49

Sie wollen array_diff.

array_diff gibt ein Array alle Einträge aus array1 enthält, die in irgendeiner der anderen Arrays nicht vorhanden sind.

So wollen Sie so etwas wie:

$good = array_diff($arr, $disallowed_words); 
0

Uses of array_dif in php: // Entfernt Werte aus der ersten Reihe, wenn das sind in der zweiten Array vorhanden sind.

$foo = array(1, 5, 9, 14, 23, 31, 45); 
$bar = array(14, 31, 36); 
$data = array_diff($foo,$bar); 
print_r($data); 
Verwandte Themen