如何使用PHP将文本文件(CSV)解析为MySQL

时间:2017-02-07 12:01:59

标签: php mysql csv parsing

我有一个.txt(csv)文件,我想通过PHP读取并将其排列在数组中,以便我可以稍后insertupdate将其导入MySQL,text文件是这样的:

FIELD1;FIELD2;FIELD3;FIELD4

CATEGORY 1(SOME VALUE in PARENTHESIS)
Sub-Category 1
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4

Sub-Category 2 
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4

CATEGORY 2(SOME VALUE in PARENTHESIS)
Sub-Category 1
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4
VALUEof1;VALUEof2;VALUEof3;VALUEof4

我已经能够单独阅读每一行,除了我已经完全空白并且无法弄清楚要做什么,任何建议或方向将不胜感激

2 个答案:

答案 0 :(得分:0)

您可以使用以下MYSQL查询导入.csv文件。 请记住,您必须将CSV文件中的列与表格中的列相匹配。 另外,我建议您参考LOAD DATA INFILE。

https://dev.mysql.com/doc/refman/5.7/en/load-data.html

MATCH (marketplace:`Marketplace`), 
(marketplace)-[rel_has_product_products:HAS_PRODUCT]->(products:`Product`),
 (product:`Product`), 
(product)-[rel_has_product_feed_productFeed:HAS_PRODUCT_FEED]->(productFeed:`ProductFeed`) 
WITH product, marketplace, 
count(productFeed) AS productFeed_count
 WHERE id(marketplace) = 123481 
and productFeed_count >= 1 
RETURN product 

答案 1 :(得分:0)

请使用此函数解析文件。现在您将获取数组中的数据,以便轻松插入数据库。

function parse_data( $file, $delimiter) {
            // Set locale
        $enc = mb_detect_encoding( $file, 'UTF-8, ISO-8859-1', true );
        if ( $enc )
            setlocale( LC_ALL, 'en_US.' . $enc );
        @ini_set( 'auto_detect_line_endings', true );

        $parsed_data = array();
        $raw_headers = array();

        // Put all CSV data into an associative array
        if ( ( $handle = fopen( $file, "r" ) ) !== FALSE ) {

            $header   = fgetcsv( $handle, 0, $delimiter );
            if ( $start_pos != 0 )
                fseek( $handle, $start_pos );

            while ( ( $postdata = fgetcsv( $handle, 0, $delimiter ) ) !== FALSE ) {
                $row = array();

                foreach ( $header as $key => $heading ) {

                    if ( $heading == '' )
                        continue;

                    // Add the heading to the parsed data
                    $row[$heading] = ( isset( $postdata[$key] ) ) ? $postdata[$key]: '';

                    // Raw Headers stores the actual column name in the CSV
                    $raw_headers[ $heading ] = $heading;
                }
                $parsed_data[] = $row;

                unset( $postdata, $row );
            }
            fclose( $handle );
        }
        return array( $parsed_data, $raw_headers );
    }