2008-10-22 19 views
12

¿De qué otro modo podría comparar dos matrices ($ A y $ B) y reducir los elementos coincidentes de la primera para preparar el siguiente ciclo sobre la matriz $ A?¿Cómo comparar dos matrices y eliminar elementos coincidentes de uno para el siguiente ciclo?

$A = array(1,2,3,4,5,6,7,8); 
$B = array(1,2,3,4); 

$C = array_intersect($A,$B); //equals (1,2,3,4) 
$A = array_diff($A,$B);  //equals (5,6,7,8) 

¿Es esta la forma más sencilla o hay una manera de utilizar otra función que no he pensado? Mi objetivo es tener una matriz en la que pueda iterar, extrayendo grupos de contenido relacionado (he definido esas relaciones en otro lugar) hasta que la matriz devuelva falso.

+0

Podría ser yo, pero no creo que la pregunta es muy clara. A medida que lo leo, solo te interesa array_diff ($ A, $ B) (lo cual parece bastante simple). ¿O el cálculo de $ C también es esencial? (Si es así, puede usar array_diff ($ A, $ C) en lugar de array_diff ($ A, $ B).) – mweerden

+0

No, declaro que $ C es la intersección de $ A y $ B – kevtrout

Respuesta

11

Lo tienes. Simplemente use array_diff o array_intersect. No es mucho más fácil que eso.

Editar: Por ejemplo:

$arr_1 = array_diff($arr_1, $arr_2); 
$arr_2 = array_diff($arr_2, $arr_1); 

Source

+2

También tenga en cuenta [array_diff_assoc ] (http://www.php.net/manual/en/function.array-diff-assoc.php) si el orden de los valores en las dos matrices es importante. – Duncanmoo

2

Ver también array_unique. Si concatenas las dos matrices, entonces se eliminarán todos los duplicados.

0

Oye, mejor solución: array _ uintersect. Esto le permite comparar las matrices según array_intersect, pero luego le permite comparar los datos con una función de devolución de llamada.

0

Trate de este

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w'); 
$b = array(1=>'a',6=>'b',2=>'y',3=>'z'); 
$c = array_intersect($a, $b); 

$result = array_diff($a, $c); 
print_r($result); 
2

Estimado manera fácil y limpia

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2); 
+0

Esta respuesta es mejor, ya que reorganiza los elementos de la matriz en los índices coincidentes. A diferencia de la respuesta de Stuart, que eliminará los elementos de los índices coincidentes. Entonces, si había un elemento coincidente en el índice 1, intenta acceder al índice 1 en la matriz de resultados, arrojará un error. – Ajji

Cuestiones relacionadas