0

私は夢中になっているに違いありません.CSVファイルを反復処理し、データベース内のレコードを通過するコードがあります。csv ファイルのレコードがデータベースのレコードと一致しない場合、それに応じてデータベースが更新されます。

デバッグするために、2 つの配列の出力を出力しました。$dbEntry は、データベースに既に存在するデータです。$entry は 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
{

出力は次のとおりです。

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

今、私はそれらが異なる型キャストであることを知っていますが、それは問題ではありません (過去にはありませんでした)。インデックス "sf_pass" が異なります。$dbEntry では 34 で、$entry では 0 です。

array_diff で何も与えられない理由がわかりません。そのため、mysql 更新クエリがある場所の下に if ステートメントを入力しません。

編集:

そして、CSV の後半で別の行から次の出力を取得するため、実際には意味がありません。次の行で探している出力が得られる理由がわかりませんが、ほとんど同じ値と型キャストを持つ別の行では探している出力が得られません

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

2 に答える 2

1

array_diff_assoc代わりに使用しますarray_diff

これらのコードを確認してください

http://codepad.org/wddrqG5h

array_diff_assocキーを考慮します

于 2012-12-14T05:49:08.763 に答える
1

デフォルトでは、array_diff関数は値のみをチェックします。また、値が繰り返される回数は考慮されません。

使用してarray_diff_assocください。配列をキーごとに比較します。

于 2012-12-14T05:41:05.693 に答える