最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP讀取和寫入CSV文件的示例代碼

 更新時(shí)間:2023年04月14日 08:40:39   作者:金刀大菜牙  
CSV(逗號(hào)分隔值)文件是使用逗號(hào)分隔信息的文本文件。該文件的每一行都是一條數(shù)據(jù)記錄,也就意味著它可以用于以表格的形式展現(xiàn)信息。本文主要介紹了PHP讀取和寫入CSV文件的方法,需要的可以參考一下

1. 什么是 CSV 文件

CSV(逗號(hào)分隔值)文件是使用逗號(hào)分隔信息的文本文件。該文件的每一行都是一條數(shù)據(jù)記錄,也就意味著它可以用于以表格的形式展現(xiàn)信息。

2. 從 CSV 文件中讀取數(shù)據(jù)

我將使用內(nèi)置函數(shù) file 從 CSV 文件中讀取數(shù)據(jù),然后使用 str_getcsv() 解析包含逗號(hào)的字符串。

在介紹如何使用str_getcsv() 函數(shù)之前,我想向你介紹如何輸出 CSV 文件中的數(shù)據(jù)。

<?php
    if($_FILES){
        var_dump(file($_FILES['file']['tmp_name'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
    }
?>
?
<html>
    <body>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="file" />
            <button>upload</button>
        </form>
    </body>
</html>

當(dāng)我使用上面的代碼上傳文件時(shí),輸出以下數(shù)據(jù):

如圖所示,每個(gè)字符串中都有逗號(hào),每個(gè)逗號(hào)將一條信息與另一條信息隔開(kāi)。

使用 array_map() 函數(shù),并且 str_getcsv() 作為回調(diào)函數(shù),該回調(diào)將解析每個(gè)具有逗號(hào)的字符串并將它們分隔在一個(gè)數(shù)組中。

if($_FILES){
    //loop through the csv file into an array
    $theCSV = array_map('str_getcsv', file($_FILES['file']['tmp_name'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
    //dump result
    var_dump($theCSV);
}

輸出如下:

輸出的數(shù)據(jù)看起來(lái)比之前要好得多,我們將列標(biāo)題(全名、QQ、電子郵件)作為該數(shù)組的第一個(gè)元素。

我們使用 array_walk() 函數(shù)遍歷此數(shù)組 ,然后提供一個(gè)回調(diào)函數(shù),它將列標(biāo)題(全名、QQ、電子郵件)和每個(gè) CSV 數(shù)據(jù)組合為一個(gè)新數(shù)組。

if($_FILES){
    //loop through the csv file into an array
    $theCSV = array_map('str_getcsv', file($_FILES['file']['tmp_name'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
    /*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
    array_walk($theCSV, function(&$ary) use($theCSV) {
        $ary = array_combine($theCSV[0], $ary);
    });
    //dump result
    var_dump($theCSV);
}
?>

注意,在上面的回調(diào)函數(shù)中,我使用了變量& 運(yùn)算符將 $ary 通過(guò)引用傳遞給函數(shù),這使的我們可以修改原始數(shù)組。當(dāng)我們運(yùn)行上面的代碼時(shí),這就是我們的 CSV 數(shù)組現(xiàn)在的樣子:

注意這里有個(gè)問(wèn)題:這個(gè)新數(shù)組的第一個(gè)元素是表頭,因?yàn)槲覀冎白屗c CSV 數(shù)組的其他數(shù)組組裝在了一起??梢允褂?array_shift() 來(lái)解決這個(gè)問(wèn)題。

if($_FILES){
    //loop through the csv file into an array
    $theCSV = array_map('str_getcsv', file($_FILES['file']['tmp_name'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
    /*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
    array_walk($theCSV, function(&$ary) use($theCSV) {
        $ary = array_combine($theCSV[0], $ary);
    });
    //remove column headers which is the first element
    array_shift($theCSV);
    //dump result
    var_dump($theCSV);
}

這就是我們最終的 CSV 數(shù)組的樣子

將上面的代碼封裝成一個(gè)函數(shù),如下:

function readCSV($file){
    if(empty($file) || !file_exists($file)) return;
    //store the column headers
    $headers = null;
    $theCSV = array_map('str_getcsv', file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
    /*Walk through the array and combine the headers which is the first element of our csv array with the rest of the csv data*/
    array_walk($theCSV, function(&$ary) use($theCSV, &$headers) {
            $ary = array_combine($theCSV[0], $ary);
            //store the headers
            $headers = $theCSV[0];
    });
    //remove column headers which is the first element of our csv array
    array_shift($theCSV);
    //return data
    return array(
        "headers" => $headers,
        "data" => $theCSV
    );
}

3. 將數(shù)據(jù)寫入 CSV 文件

將數(shù)據(jù)寫入 CSV 文件,其邏輯是使用 fopen() 函數(shù)以附加模式打開(kāi) CSV 文件, 然后用 fputcsv() 解析我們要寫入 CSV 文件的數(shù)據(jù),然后此方法將這些數(shù)據(jù)寫入文件流當(dāng)中。

if($_SERVER['REQUEST_METHOD'] == "POST"){
    $file = "./my_csv_file.csv";
    //loop through the csv file into an array
    $csvData = readCSV($file);
    //create array to store the new data
    $newData = [];
    //loop through headers and then add values as a new array
    foreach($csvData['headers'] as $index => $key){
        if($key == 'Full Name'){
            $newData[$key] = $_POST['full_name'];
        }elseif($key == 'Email'){
            $newData[$key] = $_POST['email'];
        }elseif($key == 'Phone'){
            $newData[$key] = $_POST['phone'];
        }else{
            $newData[$key] = '';
        }
    }
    var_dump($newData);
}

如圖所示就是我們將寫入到 CSV 文件的數(shù)組的數(shù)據(jù)

在我們將這些數(shù)據(jù)寫入到 CSV 文件之前,我們必須去掉 key,我們可以使用 array_values() 函數(shù)

if($_SERVER['REQUEST_METHOD'] == "POST"){
    $file = "./my_csv_file.csv";
    //loop through the csv file into an array
    $csvData = readCSV($file);
    //create array to store the new data
    $newData = [];
    //loop through headers and then add values as a new array
    foreach($csvData['headers'] as $index => $key){
        if($key == 'Full Name'){
            $newData[$key] = $_POST['full_name'];
        }elseif($key == 'Email'){
            $newData[$key] = $_POST['email'];
        }elseif($key == 'Phone'){
            $newData[$key] = $_POST['phone'];
        }else{
            $newData[$key] = '';
        }
    }
    //open the csv file as in append mode
    $fp = fopen($file, 'a+');
    //remove keys from new data
    $newData = array_values($newData);
    //append data to csv file
    fputcsv($f, $newData);
    //close the resource
    fclose($fp);
}

不出意外的話,數(shù)據(jù)就會(huì)成功寫入到 CSV 文件當(dāng)中去了。

以上就是PHP讀取和寫入CSV文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于PHP CSV文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • php實(shí)現(xiàn)將base64格式圖片保存在指定目錄的方法

    php實(shí)現(xiàn)將base64格式圖片保存在指定目錄的方法

    這篇文章主要介紹了php實(shí)現(xiàn)將base64格式圖片保存在指定目錄的方法,涉及php針對(duì)圖片文件的傳輸、判定及轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • PHP正則匹配操作簡(jiǎn)單示例【preg_match_all應(yīng)用】

    PHP正則匹配操作簡(jiǎn)單示例【preg_match_all應(yīng)用】

    這篇文章主要介紹了PHP正則匹配操作,結(jié)合簡(jiǎn)單實(shí)例形式分析了php中preg_match_all針對(duì)HTML標(biāo)簽中P元素及img src元素內(nèi)容的獲取技巧,需要的朋友可以參考下
    2017-07-07
  • PHP自定session保存路徑及刪除、注銷與寫入的方法

    PHP自定session保存路徑及刪除、注銷與寫入的方法

    這篇文章主要介紹了PHP自定session保存路徑及刪除、注銷與寫入的方法,以實(shí)例形式詳細(xì)講述了session的常用操作技巧,在進(jìn)行PHP項(xiàng)目開(kāi)發(fā)的時(shí)候有很好的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • php 判斷頁(yè)面或圖片是否經(jīng)過(guò)gzip壓縮的方法

    php 判斷頁(yè)面或圖片是否經(jīng)過(guò)gzip壓縮的方法

    下面小編就為大家?guī)?lái)一篇php 判斷頁(yè)面或圖片是否經(jīng)過(guò)gzip壓縮的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • PHP遍歷數(shù)組的方法匯總

    PHP遍歷數(shù)組的方法匯總

    php下最靈活的東西都是數(shù)組,很多數(shù)據(jù)都是通過(guò)數(shù)組的方式顯示,這里整理下數(shù)組的遍歷方法,大家可以根據(jù)需要選用。
    2015-04-04
  • 詳解PHP安裝mysql.so擴(kuò)展的方法

    詳解PHP安裝mysql.so擴(kuò)展的方法

    平常我們都是先安裝mysql,然后才能去安裝php。假如先安裝php,后安裝mysql,由于php需要連接mysql,因而在php引擎中需要配置使用mysql.so擴(kuò)展。下面這篇文章主要介紹了PHP安裝mysql.so擴(kuò)展的方法,需要的朋友可以參考下
    2016-12-12
  • PHP Global定義全局變量使用說(shuō)明

    PHP Global定義全局變量使用說(shuō)明

    Global是php中一個(gè)比較特殊的命令,大家直接叫他超級(jí)全局變量了,下面我來(lái)介紹我今天在使用Global定義全局學(xué)習(xí)筆記了
    2013-08-08
  • php基本函數(shù)匯總

    php基本函數(shù)匯總

    本文給大家匯總了16個(gè)常見(jiàn)的php基本函數(shù),涵蓋的面很廣,這里推薦給大家,希望對(duì)大家學(xué)習(xí)php能夠有所幫助。
    2015-07-07
  • PHP 獲取ip地址代碼匯總

    PHP 獲取ip地址代碼匯總

    本文給大家匯總介紹了6種php獲取IP的方法,有簡(jiǎn)單有復(fù)雜,大家根據(jù)自己的項(xiàng)目需求,自由選擇吧。
    2015-07-07
  • PHP實(shí)現(xiàn)非阻塞模式的方法分析

    PHP實(shí)現(xiàn)非阻塞模式的方法分析

    這篇文章主要介紹了PHP實(shí)現(xiàn)非阻塞模式的方法,結(jié)合實(shí)例形式分析了php非阻塞模式的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07

最新評(píng)論

山东| 古蔺县| 柳河县| 依兰县| 武乡县| 南郑县| 垫江县| 新乡市| 六安市| 凤阳县| 赣榆县| 陇川县| 赤峰市| 荣昌县| 桦南县| 武隆县| 信丰县| 刚察县| 诏安县| 江西省| 扶风县| 阿尔山市| 青铜峡市| 阿拉善右旗| 额济纳旗| 历史| 乐平市| 天峻县| 石柱| 临猗县| 连山| 霞浦县| 介休市| 札达县| 棋牌| 阿尔山市| 万全县| 阜城县| 汝南县| 彭阳县| 阳东县|