电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:122日期:2022-06-10 17:07:39
目錄
  • 1. 什么是 CSV 文件
  • 2. 從 CSV 文件中讀取數據
  • 3. 將數據寫入 CSV 文件

1. 什么是 CSV 文件

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

2. 從 CSV 文件中讀取數據

我將使用內置函數 file 從 CSV 文件中讀取數據,然后使用 str_getcsv() 解析包含逗號的字符串。

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

<?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>

當我使用上面的代碼上傳文件時,輸出以下數據:

如圖所示,每個字符串中都有逗號,每個逗號將一條信息與另一條信息隔開。

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

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);}

輸出如下:

輸出的數據看起來比之前要好得多,我們將列標題(全名、QQ、電子郵件)作為該數組的第一個元素。

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

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);}?>

注意,在上面的回調函數中,我使用了變量& 運算符將 $ary 通過引用傳遞給函數,這使的我們可以修改原始數組。當我們運行上面的代碼時,這就是我們的 CSV 數組現在的樣子:

注意這里有個問題:這個新數組的第一個元素是表頭,因為我們之前讓它與 CSV 數組的其他數組組裝在了一起。可以使用 array_shift() 來解決這個問題。

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 數組的樣子

將上面的代碼封裝成一個函數,如下:

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. 將數據寫入 CSV 文件

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

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 文件的數組的數據

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

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);}

不出意外的話,數據就會成功寫入到 CSV 文件當中去了。

以上就是PHP讀取和寫入CSV文件的示例代碼的詳細內容,更多關于PHP CSV文件的資料請關注其它相關文章!

標簽: PHP
主站蜘蛛池模板: 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 金现代信息产业股份有限公司--数字化解决方案供应商 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 深圳市源和塑胶电子有限公司-首页 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | IP检测-检测您的IP质量| 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 方源木业官网-四川木门-全国木门专业品牌| 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 |