Closed rgazelot closed 10 years ago
De plus, la comparaison de base écrase les valeurs du deuxième tableau dans le premier pour une même position avec le array_replace
. C'est utile dans certains cas mais il faut aussi un mode qui ne tient pas compte des positions et qui donne un change uniquement sur la présence ou non des valeurs.
je pense que ça a grandement à voir avec #19. Du coup, j'essaierai de m'y pencher dès que possible, car cette PR est beaucoup trop spécifique à notre cas d'utilisation... :(
Je suis pas certain que cette PR soit si spécifique à notre cas. Clairement le diff d'arrays est problématique. Dans le cas d'un array simple ou dans d'autres cas d'usage, on peut réellement souhaiter l'implem actuelle, et comparer clé à clé.
Par contre, on peut avoir des Collections (array d'objets) où l'ordre importe peu mais plutôt ce qu'il se passe au niveau des objets de cette collection. Dans ce cas il faut être en mesure d'identifier ces objets et regarder si ya eu des changes, des remove ou des add.
Dans ce cas, je pense qu'on peut éventuellement mettre en place un CollectionSnapshot
, mais le problème étant que ce sera pas récursif (comment déterminer qu'il s'agit d'une collection ? Comment déterminer la clé primaire de chaque élément de la collection ? Qu'est-ce qui garantit que ce sera toujours cette clé ? Et probablement d'autre questions qui ne me viennent pas tout de suite en tête).
Le truc du CollectionSnapshot
sera en fait de redéfinir l'array... En mettant en clé la PK trouvée. Ce qui nous affranchira de la manip mise en exergue dans cette PR. Et pourra éventuellement régler #19 au passage. Mais encore une fois, le probème étant que je ne peux descendre facilement en récursivité dedans...
Le comportement est normalement réimplémenté dans #22, je ferme donc. Je supprime aussi la branche vu qu'en interne on en a plus besoin (j'ai vu repasser le requirement du composer de dev-diff-callback à ~1.3 à nouveau).
Bon c'est un premier jet, c'est moche, mais ça fait le job dont j'ai besoin. A voir ensemble comment implémenter ça bien.