亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單個錯誤迭代但幾乎完全成功 array_combine:警告:

單個錯誤迭代但幾乎完全成功 array_combine:警告:

PHP
繁花不似錦 2022-07-29 12:33:47
這是與此問題相關的完整 csv 文件。我不明白錯誤是怎么回事警告:array_combine() 期望參數 2 是數組,布爾值在第 18 行的 C:\xampp\htdocs\kalugi\auscomp\test.php 中給出在這種情況下適用于:<?php    // Set header    function set_header($csv_input, $html_preview) {        $file = fopen($csv_input, "r");        while (!feof($file)) {            $csv_array[] = fgetcsv($file);        }        $header = array_shift($csv_array);        foreach ($csv_array as $product) {            $headered_array[] = array_combine($header, $product);        }        //print_r        if ($html_preview = 'y') {            echo '<pre>';            print_r($headered_array);            echo '</pre>';        }    }    set_header('ACDataFeed.csv', 'y');Edit: Every iteration of `print_r($header); print_r($product);` within foreach() loop reveals that both are arrays of the same size:        Array    (        [0] => No_        [1] => Manufacturer ID        [2] => Description        [3] => LQ Price        [4] => Retail Price Incl_ GST        [5] => AvailableQty        [6] => Rocklea        [7] => Sydney        [8] => Net Weight        [9] => Item Category Code        [10] => Product Group Code        [11] => Minor Category 1        [12] => Minor Category 2        [13] => Vendor Name        [14] => Vendor URL        [15] => Item URL        [16] => Warranty        [17] => Dimension        [18] => Description1        [19] => Image    )    Array    (        [0] => II00570        [1] => AUSC00008        [2] => GNR CAB USB-A-B-5M        [3] => 6.00000000000000000000        [4] => 18.00000000000000000000        [5] => 2.00000000000000000000        [6] => 1.00000000000000000000        [7] => 1.00000000000000000000        [8] => 0.01000000000000000000        [9] => GNR        [10] => CAB        [11] => CAB-USB        [12] => #        [13] =>         [14] =>         [15] =>         [16] =>         [17] => 
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

正如您將在以下解決方案中看到的那樣,這是一個非常好的問題。

這是 csv 文件的一個常見缺陷,即在使用 PHP 的內置 csv-to-array 函數(例如 fgetcsv)時,末尾的冗余行終止符實際上會導致寫入一個空數組,這些函數非?;?,不考慮這些事情。

來自array_combine的 PHP 手冊:

5.4.0 以前的版本發出 E_WARNING 并為空數組返回 FALSE。

這與編譯數組的整個 foreach 循環只返回一次錯誤這一事實相吻合,因為 csv 文件的末尾只有一個空數組。它還解釋了為什么array_combined除了最后一個元素案例之外的所有案例實際上都成功了。

看到最后一個數組是空的:

...

    [8405] => Array

        (

            [No_] => II38392

            [Manufacturer ID] => 7XB7A00034

            [Description] => LEN HDD SAS-1TB-7XB7A00034

            [LQ Price] => 336.00000000000000000000

            [Retail Price Incl_ GST] => 480.48000000000000000000

            [AvailableQty] => 0.00000000000000000000

            [Rocklea] => 

            [Sydney] => 

            [Net Weight] => 0.50000000000000000000

            [Item Category Code] => LEN

            [Product Group Code] => HDD

            [Minor Category 1] => HDD-2.5

            [Minor Category 2] => HDD-ENT

            [Vendor Name] => Lenovo

            [Vendor URL] => 

            [Item URL] => 

            [Warranty] => 3 Years

            [Dimension] => 

            [Description1] => Lenovo 7XB7A00034, ThinkSystem 2.5" 1TB 7.2K SAS 12Gb Hot Swap 512n HDD, 3 Years


            [Image] => https://auscompcomputers.com/uploads/image/LEN-HDD-SAS-1TB-7XB7A00034.jpg

        )


    [8406] => 

    )

解決方案 - 在將文件傳遞給任何其他函數之前先處理文件:


function remove_last_n($csv_input){

    //remove the very last newline to prevent a 0-field array for the last line

    $str = file_get_contents($csv_input);

    $str = preg_replace('/\n$/', '', $str);

    file_put_contents("$csv_input",$str);

}

remove_last_n('whatever_file.csv');


查看完整回答
反對 回復 2022-07-29
  • 1 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號