|
|
|
รบกวนสอบถาม เรื่อง PHP Read CSV files (fgetcsv) หน่อยครับ โดยนำมาเก็บเป็น Array |
|
|
|
|
|
|
|
ใช้การ List ไฟล์ที่ต้องการ
Code (PHP)
<html>
<head>
<title>ThaiCreate.Com PHP & opendir()</title>
</head>
<body>
<?
$objOpen = opendir("thaicreate");
while (($file = readdir($objOpen)) !== false)
{
echo "filename: " . $file . "<br />";
}
?>
</body>
</html>
Go to : PHP opendir() List Directory
จากนั้นใช้การอ่าน CSV แต่ล่ะไฟล์ แล้วเก็บลงใน Array ครับ แล้วค่อยนำค่าจาก Array มาใช้ครับ
|
|
|
|
|
Date :
2011-08-17 21:20:09 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมติดตรงที่จะอ่านไฟล์ CSV แต่ละไฟล์ แล้วเก็บลง Array นี่แหละครับ ผมไม่รู้ว่าจะต้องวนเก็บอย่างไรน่ะครับ และจะต้องใช้อะไรเช็คว่าครบจำนวนไฟล์ที่รับเข้ามาแล้วน่ะครับ รบกวนขอดูตัวอย่างหรือว่าอธิบายเพิ่มเติมให้ผมฟังหน่อยได้ไหมครับ ขอบคุณครับ
|
|
|
|
|
Date :
2011-08-18 09:49:38 |
By :
wat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ mr.win ครับ ผมขอตัวอย่าง หน่อยได้ไหมครับ ตอนนี้ผมยังทำไม่ได้เลยครับ
|
|
|
|
|
Date :
2011-08-22 09:43:01 |
By :
wat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
csv1.csv
1,11,111,1111
1,11,111,1111
1,11,111,1111
csv2.csv
2,22,222,2222
2,22,222,2222
2,22,222,2222
csv3.csv
3,33,333,3333
3,33,333,3333
3,33,333,3333
Code (readcsv.php)
<?
$arr[] = null;
$objScan = scandir("csv");
foreach ($objScan as $value) {
if($value != "." and $value != "..")
{
$strFileName = "csv/".$value;
$objFopen = fopen($strFileName, 'r');
if ($objFopen) {
while (!feof($objFopen)) {
$file = fgets($objFopen, 4096);
$arr[] = $file;
}
fclose($objFopen);
}
}
}
for($i=0;$i<count($arr);$i++)
{
echo $arr[$i]."<br>";
}
?>
screenshot
|
|
|
|
|
Date :
2011-08-22 14:04:25 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
กรณีที่ต้องการ Insert จะสังเกตุว่าไฟล์ม่อยู่ 4 column ให้ใช้ function explode() ตัดจาก comma
Code (PHP)
<?
$arr[] = null;
$objScan = scandir("csv");
foreach ($objScan as $value) {
if($value != "." and $value != "..")
{
$strFileName = "csv/".$value;
$objFopen = fopen($strFileName, 'r');
if ($objFopen) {
while (!feof($objFopen)) {
$file = fgets($objFopen, 4096);
$arr[] = $file;
}
fclose($objFopen);
}
}
}
for($i=0;$i<count($arr);$i++)
{
if($arr[$i] != "")
{
$str = explode(",",trim($arr[$i]));
$strSQL = "INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('".$str[0]."','".$str[1]."','".$str[2]."','".$str[3]."') ";
//mysql_query($strSQL);
echo $strSQL."<br>";
}
}
?>
ผลลัพธ์
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('1','11','111','1111')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('1','11','111','1111')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('1','11','111','1111')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('2','22','222','2222')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('2','22','222','2222')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('2','22','222','2222')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('3','33','333','3333')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('3','33','333','3333')
INSERT INTO tb_name (Col1,Col2,Col3,Col4) VALUES ('3','33','333','3333')
|
|
|
|
|
Date :
2011-08-22 14:10:09 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หวังว่าคงจะต่อได้น่ะครับ และอย่าลืมสมัครสมาชิกก่อนโพสด้วยครับ
|
|
|
|
|
Date :
2011-08-22 14:10:50 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมาก ๆ เลยครับ คุณ mr.win ที่ช่วยอธิบาย และทำตัวอย่างให้ดูครับ แต่ของผมจะเป็นการค้นหาข้อมูลจากไฟล์ CSV น่ะครับ
คือจะมีฟอร์มให้กรอกช่วงวันที่ที่ต้องการจะดูข้อมูล แล้วก็แสดงผลออกมาน่ะครับ การทำงานจะคล้าย การค้นหาจากฐานข้อมูลที่เป็น mysql ครับ แต่ของผมจำเป็นต้องเก็บไฟล์เป็น CSV น่ะครับ ลำดับการทำงานของผมจะเป็น ดังนี้
1. กรอกวันที่ ที่ต้องการจากฟอร์ม (เช่น กรอก วันที่ 01_01_2011 ถึง 01_03_2011)
2. เช็คว่าวันที่ตรงกับชื่อไฟล์ของ CSV อะไรบ้าง (เช็คว่ามีไฟล์ของวันที่ 1-3 หรือไหม)
3. อ่านไฟล์ CSV นั้น เก็บค่าใส่ Array (อ่านไฟล์ของวันที่ 1-3 เก็บค่าใส่ Array ไว้)
4. แสดงผลข้อมูลเป็นตารางตามรูปแบบที่กำหนด (Query แล้วแสดงผลข้อมูล)
ลักษณะการทำงานที่ผมต้องการจะประมาณนี้ครับ รบกวนคุณ mr.win แนะนำหน่อยครับ ว่าจะต้องเริ่มจากตรงไหน เพราะตามตัวอย่างที่คุณ mr.win ให้มามันจะเป็นการอ่านไฟล์ทั้งหมดเก็บใส่ array แล้ว insert ลงฐานข้อมูล mysql อ่ะครับ ซึ่งของผมไม่ใช่แบบนั้นครับ คือจะ query ข้อมูลจาก ไฟล์ CSV เลยน่ะครับ
|
|
|
|
|
Date :
2011-08-23 09:18:08 |
By :
wat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าจะให้ง่ายต่อการ Query คุณควรจะโหลด Data ลงใน MySQL ก่อนน่ะครับ แล้วค่อย Search จาก MySQL มันจะง่ายกกว่าครับ
|
|
|
|
|
Date :
2011-08-23 09:30:28 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จริง ๆ ผมก็อยากทำแบบนั้นครับ แต่ว่าโจทย์ เค้าบังคับ ให้ค้นหาจากไฟล์ CSV น่ะครับ ผมเลยไม่รู้จะต้องทำอย่างไรน่ะครับ เลยต้องขอคำแนะนำจาก คุณ mr.win หน่อยน่ะครับ ช่วยผมหน่อยเถอะครับ ผมยังคิดไม่ออกเลยครับ ว่ามันจะต้องทำอย่างไงน่ะครับ
|
|
|
|
|
Date :
2011-08-23 10:26:31 |
By :
wat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมได้ทำให้ดูเป็นตัวอย่างและอธิบายให้แล้วครับ ที่เหลือคือคุณนำไปทำความเข้าใจเองน่ะครับ
|
|
|
|
|
Date :
2011-08-23 11:14:55 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|