Merhabalar, bugün sizlere PHP Csv Class ve türkçe karakter çözümlemesi hakkında bilgi paylaşımı yapmak istedim.
Konuya başlamadan önce CSV nedir? nerelerde kullanılır bilgisini kısaca özetlemeye çalışacağım.
CSV Nedir?
Virgülle ayrılmış değerler dosyası, değerleri ayırmak için virgül kullanan sınırlandırılmış bir metin dosyasıdır. Dosyanın her satırı bir veri kaydıdır. Her kayıt virgülle ayrılmış bir veya daha fazla alandan oluşur. Alan ayırıcısı olarak virgül kullanılması, bu dosya biçimi için adın kaynağıdır.
Kaynak sevgili Vikipedia.
Nerelerde Kullanılır?
Birçok kullanım alanı var diyerek aslında geçiştirmek istesemde, ürünlerinizi kaydetmeden tutunda, kullanıcı bilgilerine kadar kayıt ederek ilerileyen süreçlerde ihtiyacınız doğrultusunda kullanabileceğiniz bir dosya formatıdır.
Peki ben bugün bu işlemi nerede kullandım; bir müşterimin elinde olan ürün listesini resim kodu ile eşleştirme yaparak listeleme kısmında kullandım. Sizde dilerseniz aşağı kısımdaki örneği kendinize göre revize ederek farklı alanlarda kullanabilirsiniz. Basit bir örnek olacağı için kendinize göre geliştirme yaparak, dataları cache yazabilir, redis’e atabilir veya farklı yöntemler kullanarak işlem yapabilirsiniz.
Gelelim Kod Paylaşımına
CSVRead Class
class CSVRead implements \Iterator
{
private $delimiter;
private $rowDelimiter;
private $fileHandle = null;
private $position = 0;
private $data = array();
/**
* The constructor
*
* @param string $filename
* @param string $delimiter
* @param string $rowDelimiter
*
* @throws Exception
*/
public function __construct($filename, $delimiter = ",", $rowDelimiter = "r")
{
$this->delimiter = $delimiter;
$this->rowDelimiter = $rowDelimiter;
$this->position = 0;
$this->fileHandle = fopen($filename, $this->rowDelimiter);
if ($this->fileHandle === FALSE) {
throw new \Exception("Unable to open file: {$filename}");
} else {
$this->parse();
}
}
/**
* Destructor
*/
public function __destruct()
{
if ($this->fileHandle) {
fclose($this->fileHandle);
$this->fileHandle = null;
}
}
/**
* Rewind iterator to the first element
*/
public function rewind()
{
if ($this->fileHandle) {
$this->position = 0;
rewind($this->fileHandle);
}
$this->parse();
}
/**
* Return the current row
*
* @return Array
*/
public function current()
{
return $this->data;
}
/**
* Return the key of the current row
*
* @return int
*/
public function key()
{
return $this->position;
}
/**
* Move forward to the next element
*/
public function next()
{
$this->position++;
$this->parse();
}
/**
* Check if current position is valid
*
* @return bool
*/
public function valid()
{
return $this->data !== array();
}
/**
* Parse each line to convert it to array
*
* @return void
*/
private function parse()
{
$this->data = array();
if (!feof($this->fileHandle)) {
$line = trim($data = mb_convert_encoding(fgets($this->fileHandle), "UTF-8", "auto"));
$this->data = str_getcsv($line, $this->delimiter);
}
}
}
read.php
/**
* CSV kütüphanesi
*/
require('CSVRead.php');
$csv = new CSVRead('catlist.csv', ';');
$read = [];
foreach ($csv as $key => $data) {
$read[$data[0]]['satin_alma'] = $data[1];
$read[$data[0]]['sezon'] = $data[2];
$read[$data[0]]['marka'] = $data[3];
$read[$data[0]]['renk'] = $data[4];
$read[$data[0]]['kumas'] = $data[5];
$read[$data[0]]['kumas_gr'] = $data[6];
$read[$data[0]]['fiyat'] = $data[7];
}
print_r($read);
ÖRNEK CSV
Urun1;20.10.2020;Bahar;Zarax;Desenli;Örnek;160;150
Urun2;21.10.2020;Yaz;Zarax;Kırmızı;Örnek;140;160
Urun3;22.10.2020;Kış;Patan;Sarı;Örnek;130;80
Urun4;23.10.2020;Kış;Patan;Sarı;Örnek;250;250
Urun5;24.10.2020;Yaz;Newt;Sarı;Örnek;280;220
Urun6;25.10.2020;Yaz;Newt;Desenli;Dovumax;140;200
Urun7;26.10.2020;Bahar;Newt;Kırmızı;Dovumax;250;160
Urun8;26.10.2020;Bahar;look;Kırmızı;Dovumax;250;150
Urun9;26.10.2020;Bahar;look;Desenli;Dovumax;160;80
Evet yukarıdaki örneklerden yola çıkarak bugün sizlere PHP Csv Class ve türkçe karakter çözümlemesi nasıl yapılır aktarmaya çalıştım.
Sizde yukarıdaki kütüphaneyi ve kodları kullanarak kendinize göre revize edebilir, kendi projenizde kullanabilirsiniz.
Sorularınız olması halinde yorum yazabilirsiniz, en kısa zamanda cevaplamaya çalışacağım.