2010-08-28 24 views
7

Ich habe ein Array, die doppelte Werte haben könnenEntfernen aller Instanzen von Elementen aus Array

$array1 = [value19, value16, value17, value16, value16] 

Ich bin für eine effiziente kleine PHP-Funktion suchen, der entweder ein Array oder eine Zeichenkette annehmen könnte (was auch immer macht es leichter)

$array2 = ["value1", "value16", "value17"]; 
or 
$string2 = "value1 value16 value17"; 

und entfernt jedes Element in Array2 oder String2 aus Array1.

wäre die richtige Ausgabe für dieses Beispiel sein:

$array1 = [value19] 

Für die erfahreneren mit PHP, so etwas wie dies in PHP verfügbar ist?

Antwort

10

Sie suchen array_diff

$array1 = array('19','16','17','16','16'); 
$array2 = array('1','16','17'); 
print_r(array_diff($array1,$array2)); 

Array ([0] => 19)

+0

denke ich, das Problem mit array_diff das ist Wenn ein Wert von Array2 in Array1 nicht existiert, wird er tatsächlich hinzugefügt, weil er ein Diff macht. Im obigen Array zum Beispiel enthält Array2 den Wert1, aber Array1 hat nicht einmal den Wert1, daher kann es nicht entfernt werden, da es nicht einmal existiert. – Lingo

+0

Sie irren sich, Array_diff fügt nichts hinzu. Versuch es. – Galen

0

Für die String-Version zu arbeiten, explodieren zu verwenden. So:

function arraySubtract($one, $two) { 
    // If string => convert to array 
    $two = (is_string($two))? explode(' ',$two) : $two; 
    $res = array(); 
    foreach (array_diff($one, $two) as $key => $val) { 
     array_push($res, $val); 
    } 

    return $res; 
} 

Diese allso ein Array mit Schlüssel zurückgibt = 0 .... n ohne Lücken

-Test mit diesem:

echo '<pre>'; 
print_r(arraySubtract(array(1,2,3,4,5,6,7), array(1,3,7))); 
print_r(arraySubtract(array(1,2,3,4,5,6,7), "1 3 7")); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), array("val1","val3","val6"))); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), "val1 val3 val6")); 
echo '</pre>'; 
Verwandte Themen