簡體   English   中英

如何從具有不同行數和列數的 PHP 中的 CSV 文件中獲取數據?

[英]How to fetch data from a CSV file in PHP with different number of rows and columns?

我正在創建一個 WordPress 自定義插件,通過上傳 CSV 文件將產品數據導入 Woocommerce 中。 CSV 文件包含具有自定義屬性和大量數據的不同類型的產品(簡單、可變、分組、外部)。 您可以查看CSV 文件 這是我的代碼:

<?PHP 

foreach($csv_file as $csv_data){
    //getting csv file name
    $csvFileName = $csv_data["name"];
    $file = fopen($csvFileName, 'r');
    $file_data = fgetcsv($file);
    $fp = file($csvFileName);

    $rows   = array_map('str_getcsv', file($csvFileName));
    $header = array_shift($rows);
    $csv    = array();
    foreach($rows as $row) {
        $csv[] = array_combine($header, $row);
    }
    $assocData = array();

    if( ($handle = fopen( $csvFileName, "r")) !== FALSE) {
        $rowCounter = 0;
        while (($rowData = fgetcsv($handle, 0, ",")) !== FALSE) {
            if( 0 === $rowCounter) {
                $headerRecord = $rowData;
            } else {
                foreach( $rowData as $key => $value) {
                    $assocData[ $rowCounter - 1][ $headerRecord[ $key] ] = $value;  
                }
            }
            $rowCounter++;
        }
        fclose($handle);
    }

//Then iterate $assocData using foreach loop and fetch all keys and values

?>

注意:上述代碼非常適用於簡單的產品類型,但在提供上述鏈接的 CSV 文件時會引發錯誤。 這是錯誤截圖: 在此處輸入圖像描述

我的目標:我想上傳一個 CSV 文件,其中包含混合產品類型的數據,如 100 個簡單產品、50 個可變產品、20 個外部產品和 10 個分組產品,然后上傳 Woocommerce 中的所有產品。

PHP 的 ParseCSV 為我工作。 If someone gets into the same situation, they can use this PHP class: https://github.com/parsecsv/parsecsv-for-php It returns CSV file data properly.

在 PHP 中打開 CSV 文件並獲取文件名后,我從代碼中添加此 PHP:

<?PHP 

    $csv = new \ParseCsv\Csv();
    $csv->auto($csvFileName);
    $csv_file_data = $csv->data;

?>

然后,我只需要使用 foreach 循環迭代$csv_file_data變量。

特別感謝@Deigo 提到 PHP class。

暫無
暫無

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

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