/ / PHP - array_diff restituisce due array diversi come uguali: php, array, array-difference

PHP - array_diff restituisce due array diversi come uguali: php, array, array-difference

Devo essere pazzo, ho un pezzo di codiceche scorre attraverso un file CSV e passa attraverso i record nel nostro database. Se i record nel nostro file csv non corrispondono ai record nel database, aggiorneranno il database di conseguenza.

Per eseguire il debug, ho stampato l'output dei due array. $ dbEntry è i dati già presenti nel database. $ entry è i dati provenienti da csv.

ksort($dbEntry);
ksort($entry);
var_dump($dbEntry);
echo "<br/>";
var_dump($entry);
echo "<br/>";
var_dump(array_diff($entry, $dbEntry));
echo "<br/>";
if ($overwrite == "on" && array_diff($entry,$dbEntry)) {
//do sql update
{

L'output è il seguente:

array(11) { ["brand"]=> string(6) "xxx" ["id"]=> int(19220) ["lmf_comm"]=> int(0) ["lmf_pass"]=> int(0) ["period"]=> string(3) "Mar" ["pma"]=> string(6) "CEDUNA" ["sf_comm"]=> int(0) ["sf_pass"]=> int(34) ["tf_comm"]=> int(0) ["tf_pass"]=> int(0) ["year"]=> string(4) "2012" }
array(11) { ["brand"]=> string(6) "xxx" ["id"]=> int(19220) ["lmf_comm"]=> string(1) "0" ["lmf_pass"]=> string(1) "0" ["period"]=> string(3) "Mar" ["pma"]=> string(6) "CEDUNA" ["sf_comm"]=> string(1) "0" ["sf_pass"]=> string(1) "0" ["tf_comm"]=> string(1) "0" ["tf_pass"]=> string(1) "0" ["year"]=> string(4) "2012" }
array(0) { }

Ora so che sono diversi tipi di cast, ma questo non dovrebbe avere importanza (non è mai esistito in passato). l'indice "sf_pass" è diverso - è 34 in $ dbEntry e 0 in $ entry?

Non capisco perché non mi venga dato nulla su array_diff e quindi non inserisco l'istruzione if sotto la quale ho una query di aggiornamento mysql.

MODIFICARE:

E davvero non ha senso perché in seguitoil CSV ottengo il seguente output da una riga diversa. Non capisco perché ciò che segue mi darà l'output che sto cercando, mentre un'altra riga con valori e caratteri tipografici praticamente identici non mi dà l'output che sto cercando

array(11) { ["brand"]=> string(4) "yyy" ["id"]=> int(12) ["lmf_comm"]=> int(0) ["lmf_pass"]=> int(8) ["period"]=> string(3) "Jan" ["pma"]=> string(8) "FIVEDOCK" ["sf_comm"]=> int(5) ["sf_pass"]=> int(4) ["tf_comm"]=> int(14) ["tf_pass"]=> int(28) ["year"]=> string(4) "2012" }
array(11) { ["brand"]=> string(4) "yyy" ["id"]=> int(12) ["lmf_comm"]=> string(2) "32" ["lmf_pass"]=> string(1) "8" ["period"]=> string(3) "Jan" ["pma"]=> string(8) "FIVEDOCK" ["sf_comm"]=> string(1) "5" ["sf_pass"]=> string(1) "4" ["tf_comm"]=> string(2) "14" ["tf_pass"]=> string(2) "28" ["year"]=> string(4) "2012" }
array(1) { ["lmf_comm"]=> string(2) "32" }

risposte:

1 per risposta № 1

Di default, il array_diff la funzione controlla solo i valori. E non considera quante volte il valore viene ripetuto.

uso array_diff_assoc. Confronta la chiave dell'array con la chiave.


1 per risposta № 2

io userei array_diff_assoc invece di array_diff

controlla questi codici

http://codepad.org/wddrqG5h

array_diff_assoc prenderà in considerazione la chiave