-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlilo_csv.class.php
More file actions
130 lines (92 loc) · 3.37 KB
/
lilo_csv.class.php
File metadata and controls
130 lines (92 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
class LiloCsv implements Iterator{
protected $internalIterator;
protected $csvSeparator;
protected $fileHandle;
protected $current;
protected $title;
public function __construct() {
$this->internalIterator = 0;
$this->csvSeparator = ';';
$this->fileHandle = null;
$this->current = null;
$this->title = false;
}
public function setSeparator($separator){
$this->csvSeparator = $separator;
}
public function load($file, $title = false){
if($this->fileHandle !== null){
throw new Exception('A file is already loaded.');
return false;
}
if(!file_exists($file)){
throw new Exception('File don\'t exists.');
return false;
}
$handle = fopen($file, 'r');
if(!$handle){
throw new Exception('Fopen fail to open the file.');
return false;
}
$this->fileHandle = $handle;
$this->activateTitle = $title;
}
public function current(){
if(is_null($this->current)){
throw new Exception('nothing in current item, check initialization');
return false;
}
if($this->title !== false && is_array($this->title)){
foreach($this->current as $key => $item){
$this->current[$this->title[$key]] = $item;
}
}
return $this->current;
}
public function key(){
return $this->internalIterator;
}
public function next(){
$this->internalIterator++;
}
public function rewind(){
rewind($this->fileHandle);
$this->internalIterator = 0;
//make title
if($this->activateTitle){
if($this->valid()){
$current = $this->current();
foreach($current as $key => $item){
$this->title[$key] = $item;
}
}
}
}
public function valid(){
$current = fgetcsv($this->fileHandle, 0, $this->csvSeparator);
if($current === null){
throw new Exception('file handle not valid.');
return false;
}
if($current === false){
return false;
}
$this->current = $current;
return true;
}
}
//chargement de la classe :
$csvFile = new LiloCsv();
//chargement du fichier :
$csvFile->load('file.csv');
//on peux foreach dessus, le parcours se fait ligne par ligne et renvoi un tableau contenant les colonnes du fichier (tableau indexé de 0 à n —n étant le nombre de colonne moins 1—)
foreach($csvFile as $item){
echo $item[1].'<br />'; //je récupère le contenu de la deuxième colonne
}
//ASTUCE : si votre première ligne contient le nom des colonnes de votre fichier CSV, une option permet de les prendre en compte :
$csvFile->load('file.csv', TRUE); //présence du true qui active l'option
//on peux foreach avec le nom des colonnes par exemple dans mon cas j'ai une colonne nommée 'titre' qui est présente
foreach($csvFile as $item){
echo $item['titre]'].'<br />'; //je récupère le contenu de la deuxième colonne
}