Cacetada! Eu inverto e começa a me retornar o array de cache inteiro SEM os índices POST que são enviados. Vou tentar nesse "modo" disponível no PHP 5.3 para o terceiro parâmetro. De repente...Eu tinha comentado isso lá no início...
[]’sAtenção à ordem dos dois primeiros parâmetros da função array_udiff(). Se retornar o oposto do que você quer, basta invertê-los.
[EDIT]
Vamos ver...
$cache = array( array( 'filepath' => 'p/t/f/A.php', 'checksum' => 'xyz123', 'filename' => 'A.php' ), array( 'filepath' => 'p/t/f/B.php', 'checksum' => 'xyz456', 'filename' => 'B.php' ), array( 'filepath' => 'p/t/f/Anuncios.php', 'checksum' => 'xyz111', 'filename' => 'Anuncios.php' ), array( 'filepath' => 'p/t/f/C.php', 'checksum' => 'xyz222', 'filename' => 'CPXInteractive.php' ) ); $files = array( array( 'filepath' => 'p/t/f/A.php', 'checksum' => 'xyz123', 'filename' => 'A.php' ), array( 'filepath' => 'p/t/f/B.php', 'checksum' => 'xyz456', 'filename' => 'B.php' ), array( 'filepath' => 'p/t/f/Anuncios.php', 'checksum' => 'xyz000', 'filename' => 'Anuncios.php' ) ); $updates = array_udiff( $cache, $files, function( array $cache, array $files ) { return strcmp( $cache['checksum'], $files['checksum'] ); } ); // Retorno: Array ( [2] => Array ( [filepath] => p/t/f/Anuncios.php [checksum] => xyz111 [filename] => Anuncios.php ) [3] => Array ( [filepath] => p/t/f/CPXInteractive.php [checksum] => xyz222 [filename] => CPXInteractive.php ) )
Perfeito
Mas quando implemento $cache como sendo o arquivo diversas vezes anexado e
o $files como sendo a propriedade $this -> data['files'], o resultado é:
Array ( // Esse apareceu, pois é diferente. Perfeito [0] => Array ( [filepath] => admin/application/controllers/AdvertisementController.php [checksum] => 928c5e3bd0c5f8d3613fce7a3bdc9dac [filename] => AdvertisementController.php ) [1] => Array ( [filepath] => admin/application/controllers/BugsController.php [checksum] => 928ec3fb60a648aeeb62c98408af642c [filename] => BugsController.php ) [2] => Array ( [filepath] => admin/application/controllers/CreditsController.php [checksum] => c7e903ef55c0df721ffe03ef92fd9904 [filename] => CreditsController.php ) [3] => Array ( [filepath] => admin/application/controllers/DatabaseController.php [checksum] => 4846aa17f662a8d65e4901d7597d5a37 [filename] => DatabaseController.php ) // Aqui, no índice nº.4, seria o HomeController cujo checksum é igual ao corrente do cache // Ele NÃO apareceu e isso é bom. Mas e os outros índices? // Não estão presentes no array de enviados e são listados [5] => Array ( [filepath] => admin/application/controllers/IntegrationController.php [checksum] => 93cfd92a29f94608c7ad80a1ce440892 [filename] => IntegrationController.php ) // Cotinuando, no índice nº. 101 (não mostrado aqui), tenho o correspondente // ao CPXInteractive.php, recém adicionado para testes // Ele está sendo listado porque não existe no array enviado. )
E, como sempre, o array dos arquivos enviados continua o mesmo:
$this -> data = array ( 'service' => 'WordPress', 'product' => 'Corporative', 'uType' => 'fixes', 'files' => array ( 0 => array ( 'filepath' => 'admin/application/controllers/AdvertisementController.php', 'checksum' => '42ab4fc2af91337be03ce1cb7f4fd837', 'filename' => 'AdvertisementController.php', ), 1 => array ( 'filepath' => 'admin/application/controllers/HomeController.php', 'checksum' => '28cbf3c60752631a3fa87e427e35afb6', 'filename' => 'HomeController.php', ), 2 => array ( 'filepath' => 'admin/library/Zend/Controller/Request/Exception.php', 'checksum' => 'ef458d8a75cc650d9cbf90ff89df9012', 'filename' => 'Exception.php', ), ), )Obviamente está havendo outro mal entendido, tal qual quando explicado sobre a impossibilidade de se haver
arquivos de mesmo checksum. Mas qual?
Canso de dar print_r() no meu $cache aparentemente defeituso e no improvisado funcional e vê-los estruturadamente iguais, exceto pela quantidade de índices.
Tal sentimento de frustração é ´recóproco para $this -> data['files] e o array de comparação final.
E pior que a única explicação que me vem à cabeça seria essa diferença na quantidade de índices. Mas logo que penso nisso, acabo desistindo da hipotese pois vejo o exemplo funcional onde os arrays posseum tamanhos diferentes de todo jeito.
Uma coisa que aparenta ser simples, tem provas de que funciona, mas em duas estruturas de três etapas visualmente iguais produzem resultados diferentes. Haja paciência.