/ / PHP - array_diff vracajúce dve rôzne polia rovnako - php, polia, maticový rozdiel

PHP - array_diff vracia dve rôzne polia ako rovnocenné - php, pole, pole-difference

Musím sa zblázniť, mám kúsok kóduktorý iteruje prostredníctvom súboru CSV a prechádza záznamy v našej databáze. Ak sa záznamy v našom súbore CSV nezhodujú so záznamami v databáze, bude zodpovedajúcim spôsobom aktualizovať databázu.

Na ladenie som vytlačil výstup z dvoch polí. $ dbEntry sú dáta už v databáze. $ entry sú dáta pochádzajúce z 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
{

Výstup je nasledovný:

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) { }

Teraz viem, že to sú rôzne typy obsadení, ale na tom by nemalo záležať (v minulosti to tak nebolo). index „sf_pass“ je iný - je to 34 v $ dbEntry a 0 v $ entry?

Nerozumiem, prečo mi na poli array_diff nič nie je, a preto nezadávam vyhlásenie if pod miestom, kde mám aktualizačný dotaz mysql.

EDIT:

A naozaj to nedáva zmysel, pretože neskôr vCSV dostanem nasledujúci výstup z iného riadku. Nerozumiem, prečo mi nasledujúce dá výstup, ktorý hľadám, zatiaľ čo ďalší riadok s takmer rovnakými hodnotami a typovými informáciami mi nedáva výstup, ktorý hľadám

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" }

odpovede:

1 pre odpoveď č. 1

V predvolenom nastavení array_diff funkcia kontroluje iba hodnoty. A nezvažuje sa, koľkokrát sa hodnota opakuje.

použitie array_diff_assoc, Porovnáva kľúč poľa podľa kľúča.


1 pre odpoveď č. 2

Použil by som array_diff_assoc namiesto array_diff

skontrolujte tieto kódy

http://codepad.org/wddrqG5h

array_diff_assoc vezme kľúč do úvahy