2010-08-28 3 views
7

J'ai un tableau qui peut avoir des valeurs en doubleSuppression de toutes les instances d'éléments de tableau

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

Je suis à la recherche d'une fonction peu de PHP efficace qui pourrait accepter soit un tableau ou une chaîne (selon le rend plus facile

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

et supprime chaque élément dans array2 ou string2 de array1.

La sortie de droite pour cet exemple serait:

$array1 = [value19] 

Pour ceux qui sont plus expérimentés avec PHP, est quelque chose comme disponible en PHP?

Répondre

10

vous cherchez array_diff

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

Array ([0] => 19)

+0

Je pense que le problème avec array_diff est que si une valeur de array2 n'existe pas dans array1, elle sera réellement ajoutée, car elle fait un diff. Dans le tableau ci-dessus par exemple, array2 inclut value1, mais array1 n'a même pas value1, donc il ne peut pas être supprimé car il n'existe même pas. – Lingo

+0

vous vous trompez, array_diff n'ajoute rien. Essaye le. – Galen

0

Pour la version chaîne pour travailler, utilisez exploser. Comme ceci:

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

Ce retour allso un tableau avec clé = 0 .... n sans lacunes

test avec ceci:

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>'; 
Questions connexes