Primitivo, mas bem explicado, certo?
Estou na Lan, então vamos ver "o que sai de cabeça":
Sem releases ou features nem nada, duas estruturas iguais, com os mesmos arquivos e diretórios.
$cache (pós unserialize):
array( array( 'filepath' => 'path/para/arquivo/X.php', 'checksum' => 'xyz123' => 'filename' => 'X.php' ),
array( 'filepath' => 'path/para/arquivo/Y.php', 'checksum' => 'xyz456' => 'filename' => 'Y.php' ),
array( 'filepath' => 'path/para/arquivo/Z.php', 'checksum' => 'xyz789' => 'filename' => 'Z.php' ), /*...*/ );
$this -> data['files'] (arquivos recebidos via POST, tratados e enviados via cURL [ou não]):
array( array( 'filepath' => 'path/para/arquivo/A.php', 'checksum' => 'xyz123' => 'filename' => 'A.php' ),
array( 'filepath' => 'path/para/arquivo/B.php', 'checksum' => 'xyz456' => 'filename' => 'B.php' ),
array( 'filepath' => 'path/para/arquivo/Z.php', 'checksum' => 'abc987' => 'filename' => 'Z.php' ), /*...*/ );
A comparação, nesse caso deveria retornar o índice referente à
Z.php vindo de
$cache, pois ele é o repositório, com a versão mais recente de
Z.php.
Certo?
Cenário: Parte do sistema é um gerenciador de anúncios (Google AdSense, Yahoo! Publisher Network e etc.). Cada sistema de anúncios possui suas particularidades e, por isso, possuei sua própria classe que implementa uma interface comum.
Suponhamos que eu deseje adicionar suporte à detecção e manipulamento dos banners da... sei lá... CPX Interactive.
Crio uma classe para o sistema e MODIFICO a biblioteca principal, que recebe o código do anúncio, verifica "por cima" algumas coisas comuns àquele Sistema de Anúncios, inclui a classe Adaptadora e passa as informações para controlador que faz todo o resto das operações.
Com isso em mente ficamos:
$cachearray( array( 'filepath' => 'path/para/arquivo/X.php', 'checksum' => 'xyz123' => 'filename' => 'X.php' ),
array( 'filepath' => 'path/para/arquivo/Y.php', 'checksum' => 'xyz456' => 'filename' => 'Y.php' ),
array( 'filepath' => 'path/para/arquivo/Z.php', 'checksum' => 'xyz789' => 'filename' => 'Z.php' ),
array( 'filepath' => 'path/para/biblioteca/gerenciadora/de/Anuncios.php', 'checksum' => 'xyz000' => 'filename' => 'Anuncios.php' ),
array( 'filepath' => 'path/para/classe/CPXInteractive.php', 'checksum' => 'xyz222' => 'filename' => 'CPXInteractive.php' ), /*...*/ );
$this -> data['files']array( array( 'filepath' => 'path/para/arquivo/A.php', 'checksum' => 'xyz123' => 'filename' => 'A.php' ),
array( 'filepath' => 'path/para/arquivo/B.php', 'checksum' => 'xyz456' => 'filename' => 'B.php' ),
array( 'filepath' => 'path/para/arquivo/Z.php', 'checksum' => 'xyz789' => 'filename' => 'Z.php' ),
array( 'filepath' => 'path/para/biblioteca/gerenciadora/de/Anuncios.php', 'checksum' => 'xyz111' => 'filename' => 'Anuncios.php' ), /*...*/ );
A diferença, nesse caso, retornaria o
Anuncios.php de
$cache, que agora inclui suporte à CPX Interactive e também retornaria a própria classe da CPX Interactive, que, na instalação/versão corrente do usuário, ainda não existe.
Acredito que agora tenha ficado bem claro, tanto a necessidade como o porquê de eu bater tanto na tecla de usar a combinação de array_udiff() com strcmp().