簡體   English   中英

為什么我不能將CSV文件中的新項目添加到PHP的while循環內的數組中?

[英]Why I can't add a new item from a CSV file into an array inside a while loop in PHP?

我想生成一個jSON字符串,其中包含使用PHP從csv文件導入的一些數據,並將其稍后添加到mySQL數據庫字段中。

我想獲取數據庫字段中已經存在的信息,並使用從csv文件導入的信息進行更新。

導入的數據是對數據庫中每個帖子的注釋。 注釋以jSON格式插入表字段。 我想要的是逐行添加所有注釋(在csv文件中)。

這是我的論壇表:

CREATE TABLE foro (
    foroID int unsigned not null auto_increment primary key,
    userID int(11) NOT NULL,
    deprecated_nodeID int(11) NULL,
    datosPost text null //THIS IS THE FIELD IN JSON FORMAT
)

不推薦使用的節點ID是我正在從中導入信息的舊站點的發布ID。

這是來自csv文件的一些示例數據:這是我將每一行插入數組時的格式:

array(5) { 
    [0]=> string(3) "deprecated_nodeID" 
    [1]=> string(16) "commentTitle" 
    [2]=> string(9) "date" 
    [3]=> string(16) "userID" 
    [4]=> string(10) "comment" 
} 

“ 9193”,“ Mabel de acuerdo a mis”,“” 13.02.2017 16:54:37“,” 21222“,” En caso de que se quieran ejecutarmásde dos y el demandado paga。Saludos“

“ 9193”,“Segúnel material”,“ 01.03.2017 17:03:10”,“ 24970”,“Segúnel material suministrado”

“ 9193”,“ Lo Planteo en clase”,“ 02.03.2017 09:03:22”,“ 21222”,“ Hay una incongruencia entre el material y lo que se dio en clase,gracias Marcela”

“” 9191“,” Hola Mabel,行政長官“,” 13.02.2017 16:48:51“,” 21222“,”行政長官在沒有依賴權的情況下,必須在服務上保留一切權利。“

“” 9168“,”實現實體“,” 13.02.2017 17:03:19“,” 21222“,”注冊人登記表“,一個人的名義。

如您所見,csv文件中的前三行對應於同一nodeID的注釋,因此它們都應插入同一字段中。

為此,我正在這樣做,而我的問題是,即使我處於while循環中,也無法插入所有新的數組元素,因為新的元素會覆蓋舊的元素。

請注意,我仍然沒有將輸出轉換為jSON,它仍然是數組格式,由於循環問題,目前我被困在那里。

if (($handle = fopen("importar.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $conectar = new PDO('mysql:host='.HOST.'; dbname='.DATABASE.'; charset=utf8', USER, PASS); 

        $deprecated_nodeID = $data[0];

        $importarNodo = $conectar->prepare('
            SELECT deprecated_nodeID, datosPost FROM foro
            WHERE deprecated_nodeID = ?
            ');
            $importarNodo->bindParam(1, $deprecated_nodeID);
            $ok = $importarNodo->execute();
//HERE I GET THE NODE TO BE UPDATED LATER WITH THE NEW INFORMATION.
//THE FIELD THAT SHOULD BE UPDATED LATER IS datosPost THAT IT ALREADY HAS SOME INFORMATION.
            $x = $importarNodo->fetch(PDO::FETCH_ASSOC);            

            $datosPost = json_decode($x['datosPost'], TRUE);

如果我執行var_dump($ datosPost),則會得到以下格式:

array(3) { 
    ["fecha"]=> array(1) { 
        [0]=> int(1158019156) 
    } 
    ["autor"]=> array(1) { 
        [0]=> string(1) "1" 
    } 
    ["mensaje"]=> array(1) { 
        [0]=> string(160) "Si se dispone que el pago de las expensas" 
    } 
}

//IF THE NODE ID IS THE SAME AS THE NODE ID OF THE CSV LINE
//THEN PROCEED TO ADD A NEW ITEM TO THE ARRAY
            if ($x['deprecated_nodeID'] == $data[0]) {

                $datosPost['fecha'][] = obtenerUnixTime($data[2]);
                $datosPost['autor'][] = $data[3];
                $datosPost['mensaje'][] = $data[4];

添加所有新信息之后的預期輸出是這樣的:

array(3) { 
    ["fecha"]=> array(1) { //date of first post and each comment
        [0]=> int(1158019156)
        [1]=> int(1158019654) 
        [2]=> int(1158749156) 
        [3]=> int(6548019156) 
        ...
    } 
    ["autor"]=> array(1) { //author user ID
        [0]=> string(1) "1" 
        [1]=> string(1) "58" 
        [2]=> string(1) "23" 
        [3]=> string(1) "5" 
        ...
    } 
    ["mensaje"]=> array(1) { //first post and later comments
        [0]=> string(160) "Si se dispone que el pago de las expensas" 
        [1]=> string(160) "Banco a la orden del Consorcio" 
        [2]=> string(160) "el ticket del Banco sirve" 
        [3]=> string(160) "como recibo de expensas?" 
    } 
}

...

我得到的只是添加了一條注釋(在每種情況下,我都得到[0][1] ),好像在每次循環傳遞中它們都被覆蓋了,還是循環不起作用?

我嘗試使用array_push()而不是使用$datosPost['fecha'][]等添加新項,但是結果是相同的。

您的$datosPost在每次迭代的while循環內$datosPost被覆蓋,請嘗試在代碼的$myArr = array();添加一個數組,例如$myArr = array(); 並在將$datosPost填充后,使用array_push($myArr, $datosPost)將其添加到$myArr (可以在if語句之后執行此操作,

也嘗試var_dump($datosPost ); while循環中查看它是否實際上正在更新,

您可以echo 'here';添加echo 'here'; if ($x['deprecated_nodeID'] == $data[0])查看您的代碼是否真正進入if語句,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM