溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中

發(fā)布時間:2022-02-25 16:38:15 來源:億速云 閱讀:141 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中

在這篇文章中,我將向你展示如何使用PHP的內(nèi)置函數(shù)來讀取和打印一個CSV文件的內(nèi)容,并將其轉(zhuǎn)換成一個數(shù)組。我們將使用fopen()fgetcsv() 讀取CSV文件的內(nèi)容,然后使用array_map()str_getcsv() 函數(shù)將其轉(zhuǎn)換成數(shù)組。

簡介

以逗號分隔的數(shù)值(CSV)格式存儲數(shù)據(jù)文件并不是什么新鮮事。事實上,由于其簡單性,它是最常見的數(shù)據(jù)存儲方式之一--CSV文件易于讀寫,并且可以在基本的文本編輯器中打開。這種類型的文件以純文本的形式存儲表格數(shù)據(jù)。

這樣一個文件的例子是這樣的。

Elias,40,nurse
Rehema,15,programmer
Beatrice,23,doctor

這個數(shù)據(jù)代表了三個人的信息,有對應(yīng)于他們名字、年齡和工作的列。雖然這是一種簡單的數(shù)據(jù)格式,但它的閱讀和消費是很棘手的。

因此,在這篇文章中,我將教你如何使用PHP的原生函數(shù)(如fopen() )打開CSV文件,如何使用fgetcsv() 方法讀取這個文件的內(nèi)容,最后是如何使用array_map() 函數(shù)將這個CSV文件轉(zhuǎn)換成一個數(shù)組。

當然,我們可以使用一些第三方軟件包來實現(xiàn)這些,但PHP內(nèi)置的本地函數(shù)非常好用。

前提條件

要繼續(xù)學(xué)習(xí)這篇文章,你需要以下條件。

  • 在你的機器上安裝了 PHP 5.6 或更高的版本

  • 一個PHP的開發(fā)環(huán)境--XAMPP或WampServer都很好用

  • 對PHP概念的一些基本了解

我們開始吧!

將CSV文件顯示為一個表

在文章的這一部分,我們將讀取一個簡單的CSV文件,其中包含幾個由逗號分隔的詞。開始時,我們將使用上面的簡單文件,以后我們可以繼續(xù)使用一個隨機的大文件。當然,你可以使用Microsoft Excel或文本編輯器創(chuàng)建自己的文件,并以CSV為擴展名保存。

要讀取該文件,我們首先要在其保存的文件夾或位置找到它。為了方便訪問,你可能想把它保存在你的程序文件的同一個文件夾里。然后我們可以使用fopen() 函數(shù)來讀取該文件。

之后,fgetcsv() 函數(shù)從打開文件的解析行中檢查CSV字段。這個函數(shù)需要三個參數(shù):從fopen() 返回的文件句柄,要讀取的行的最大長度,以及特殊的分隔符--我們稱之為 "分隔符"。這可以是一個逗號、一個分號或任何其他分隔符。

現(xiàn)在讓我們來實際操作一下。

在可以用WAMP或XAMPP提供服務(wù)的地方創(chuàng)建一個名為csvtable.php的文件,并復(fù)制以下代碼。

<?php

$file_to_read = fopen('data.csv', 'r');

if($file_to_read !== FALSE){
    
    echo "<table>\n";
    while(($data = fgetcsv($file_to_read, 100, ',')) !== FALSE){
        echo "<tr>";
        for($i = 0; $i < count($data); $i++) {
            echo "<td>".$data[$i]."</td>";
        }
        echo "</tr>\n";
    }
    echo "</table>\n";

    fclose($file_to_read);
}

?>

在這個文件中,我們首先打開data.csv文件,它應(yīng)該包含一些逗號分隔的數(shù)據(jù)。fopen 將在與csvtable.php相同的文件夾中尋找這個文件。'r' 參數(shù)告訴fopen ,以只讀方式打開該文件。

如果文件被成功打開,fopen 將返回一個文件句柄,可用于其他文件的讀取操作。否則,它將返回FALSE 。因此,在繼續(xù)讀取文件之前,我們檢查文件句柄是否為FALSE

然后,fgetcsv() 文件從打開的文件中獲取CSV字段,一次一行。我們告訴fgetcsv ,每行最多讀取100個字符,并使用逗號分隔符作為分隔符。然后,在文件中找到的字被循環(huán)瀏覽,并打印到一個HTML表格中。

最后一個函數(shù)是fclose() ,它關(guān)閉了打開的文件。這將釋放打開的文件所使用的內(nèi)存,并允許其他進程訪問該文件。

通過WAMP或XAMPP localhost服務(wù)器打開csvtable**.php**,或從命令行運行php read.php ,可以看到以下輸出。

PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中

我們需要實現(xiàn)的第一部分已經(jīng)完成了!

現(xiàn)在,我們將跳到將原始CSV字段轉(zhuǎn)換為數(shù)組。

將原始CSV文件轉(zhuǎn)換為數(shù)組

現(xiàn)在,有不止一種方法來產(chǎn)生數(shù)組。我們可以使用fgetcsv() 函數(shù)將CSV文件的內(nèi)容自動轉(zhuǎn)換為數(shù)組,或者我們可以使用array_map 。

使用fgetcsv() ,將CSV文件轉(zhuǎn)換成數(shù)組

這與上面的例子類似,我們使用fgetcsv() ,將一個CSV文件渲染成一個HTML表格。讓我們來看看這個動作。創(chuàng)建一個具有以下內(nèi)容的PHP文件。

<?php
function csvToArray($csvFile){

    $file_to_read = fopen($csvFile, 'r');

    while (!feof($file_to_read) ) {
        $lines[] = fgetcsv($file_to_read, 1000, ',');

    }

    fclose($file_to_read);
    return $lines;
}

//read the csv file into an array
$csvFile = 'data.csv';
$csv = csvToArray($csvFile);

//render the array with print_r
echo '<pre>';
print_r($csv);
echo '</pre>';
?>

在上面的代碼中,我們創(chuàng)建了一個函數(shù)來讀取一個CSV文件并將其轉(zhuǎn)換為數(shù)組。我們傳入一個參數(shù),包含CSV文件的名稱和路徑。

然后,我們使用feof() 函數(shù)來檢查是否已經(jīng)到達文件的末端。在到達之前,我們需要使用fgetcsv() 函數(shù)解析CSV字段,就像我們在上面的例子中做的那樣。

使用fgetcsv() 函數(shù)將CSV文件中被解析的CSV字段轉(zhuǎn)換為數(shù)組,并將其逐一追加到$lines[] 變量中。

最后,別忘了在退出函數(shù)之前,使用fclose() 函數(shù)關(guān)閉已打開的文件。

然后,我們調(diào)用readDocument 函數(shù),該函數(shù)將CSV文件作為參數(shù)傳遞,接下來,CSV文件的內(nèi)容將顯示如下。

PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中

使用array_map() 讀取一個CSV文件

另外,你也可以使用array_map() 函數(shù)將一個CSV文件讀入一個數(shù)組。要做到這一點,你要使用str_getcsv 作為回調(diào)函數(shù)。這是一個內(nèi)置的PHP函數(shù),用來解析一個CSV字符串到一個數(shù)組中。

回調(diào)函數(shù)是一些可執(zhí)行的代碼,它作為一個參數(shù)傳遞給另一段代碼。這個參數(shù)預(yù)計在以后會被傳遞給它的代碼回調(diào)。

下面是我們?nèi)绾问褂?code>array_map 和str_getcsv ,將我們的CSV數(shù)據(jù)映射成一個數(shù)組。

<?php
$csv = array_map('str_getcsv', file('data.csv'));
echo '<pre>';
print_r($csv);
echo '</pre>';
?>

上面的代碼使用file() 方法將CSV文件讀成一個行數(shù)組。然后,通過數(shù)組映射,它在每一行上調(diào)用str_getcsv() ,并將整個文件的數(shù)據(jù)存儲在$csv 。str_getcsv() 函數(shù)將每一行的CSV字段內(nèi)容解析為一個數(shù)組。

上述代碼片斷的輸出將與上述相同。

注意到在直接使用file()array_map() 函數(shù)時,需要的代碼少了很多嗎?

“PHP中怎么讀取CSV內(nèi)容并存入一個數(shù)組中”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI