Synchronizace pomocí polí v PHP
V tomto zápisku bych rád popsal řešení poměrně časté situace, se kterou se setkáváme v administračních či podobných systémech.
Často je potřeba vyřešit přiřazování položek nějaké skupině (např. zařazování a odebírání uživatelů do pracovních skupin). S tím vyvstává problém synchronizace existující množiny vůči nové množině ID, konkrétně je potřeba přidat do databáze všechna ID nově vybraných uživatelů, zrušit všechna ID odebraných uživatelů a stejné záznamy ponechat beze změny.
Když tento problém zjednodušíme na pole, je vše překvapivě jednoduché, klíčem je použití funkce array_diff():
// pole puvodnich zaznamu v databazi
$original = array(1, 2, 4, 5);
// pole s novym uzivatelskym vstupem
$new = array(1, 3, 5);
// nove pridane polozky (3)
$added = array_diff($new, $original);
// odebrane polozky (2, 4)
$removed = array_diff($original, $new);
Pokud k této práci s poli dopíšeme vrstvu s SQL dotazy (SELECT pro $original, INSERT pro $added a DELETE pro $removed) je vše vyřešeno.