Buenas a todos.
Llevo dos días cascandome la cabeza con lo que os plantearé, y aun no he encontrado una solución óptima, clara y concísa.
Solucionado está, pero no del modo que quisiera, ya que lo he resuelto via "strings".
Lo que quisiera peró, es resolverlo mediante arrays, y quiero ver si vosotros podeis sacar algo en claro.
Os presento al quebradero!
Tengo un array $original, y un array $nuevo.
Dentro de cada uno de ellos, tengo valores numéricos (podrian ser strings, no deberia importar, el método de resolución deberia ser genérico).
Quiero eliminar en ambos arrays las coincidencias, y dejar en cada uno de ellos, los valores que no coinciden tal cual, sin tocarlos.
Podriais pensar en una diferencia, pero PHP no dispone de una función que haga LO QUE QUIERO.
Estas te devuelven un array con la diferencia, y no puedo identificar que pertenece a que.
Visualmente, lo que quiero es lo siguiente:
$original = array(1,2,3);
$nuevo = array(2,3,4);
- Restarlos de algun modo, eliminando coincidencias, y que quede lo siguiente:
$original = array(1);
$nuevo = array(4);
- fijarse que se ha eliminado el 2 y el 3.
Y lo quiero así, porque lo que queda en $original me indica que debo hacer X cosa con dichos números, y lo que queda en $nuevo, me indica que debo hacer Y otra cosa con los numeros restantes.
El diff (y sus variantes) de PHP, devolveria algo así:
$resultado = array(1,4);
y no me permitiria saber donde estaba el 1 ($original o $nuevo) y lo mismo con el 4.
Podria intentarse con arrays bidimensionales, para tenerlos marcados, y hacer una diferencia de PHP?
$original = array(1=>'org',2=>'org',3=>'org');
$nuevo = array(2=>'new',3=>'new',4=>'new');
$result = diff......() = array(1=>'org',4=>'new');
no me gusta demasiado la idea, quisiera una función que directamente hiciera la diferencia, dejando los arrays modificados, tal cual, sin devolver un resultado.
Entonces, ¿que se os ocurre gente?
Grácias, y a ver que sacamos en claro...
PD: he probado bucles recorriendo el $original, y haciendo unset() de los valores en ambos arrays cuando uno estuviera contenido en el otro, tanto por medio de for, foreach, while, current/next, etc...
Y nada, no hay manera. Si se modifica el contenido en cantidad en tiempo de loop, siempre hay problemas, porque los posicionadores no apuntan correctamente. Aunque no avances y solo lo hagas si no hay coincidencia. Dado que el size varia, siempre hay problemas...