| 
<?php
 class CSV_Data{
 
 protected $cache = array();
 protected $lang;
 protected $file;
 
 public function __construct($file){
 $this -> setFile($file);
 }
 
 public function setFile($file) {
 $this -> file = preg_replace("#[\////]+#",DIRECTORY_SEPARATOR, $file);
 $path = $this -> file;
 if(!array_key_exists($path, $this -> cache)){
 if(file_exists($path)){
 $found = true;
 } else {
 $found = false;
 }
 if($found){
 $file = fopen($path, 'r');
 $flex = true;
 $array = array();
 $names = array();
 while (($line = fgetcsv($file,0,',','"',"\\")) !== FALSE) {
 if($line){
 $name = array_shift($line);
 if($flex){
 if(!$line){
 break;
 }
 $indexes = array();
 foreach($line as $index1){
 if(!array_key_exists($index1, $array)){
 $array[$index1] = array();
 $indexes[] = $index1;
 }
 }
 $flex = false;
 } else {
 if(!array_key_exists($name, $names)){
 foreach($indexes as $i => $index1){
 if(array_key_exists($i, $line)){
 $array[$index1][$name] = stripslashes($line[$i]);
 } else {
 $array[$index1][$name] = null;
 }
 }
 $names[$name] = true;
 }
 }
 }
 }
 } else {
 $array = array();
 }
 $this -> cache[$path] = $array;
 }
 return $this;
 }
 
 public function get($x, $y){
 $path = $this -> file;
 if(!empty($this -> cache[$path][$x]) && array_key_exists($y, $this -> cache[$path][$x])){
 return $this -> cache[$path][$x][$y];
 } else {
 return "";
 }
 }
 
 public function edit($x, $y, $new_value){
 $key = key($this -> cache[$this -> file]);
 if(!array_key_exists($y,$this -> cache[$this -> file][$key])){
 $keys_z = array();
 foreach($this -> cache[$this -> file][$key] as $keyz=>$val){
 if(empty($this -> cache[$this -> file][$x])||
 !array_key_exists($keyz,$this -> cache[$this -> file][$x])){
 $this -> cache[$this -> file][$x][$keyz] = "";
 $this -> cache[$this -> file][$key][$y] = "";
 }
 }
 }
 $this -> cache[$this -> file][$x][$y] = $new_value;
 return $this;
 }
 
 public function save()
 {
 $lines = array(array("index"));
 $xindex = 1;
 $yindex = 0;
 foreach($this -> cache[$this -> file] as $x => $value1)
 {
 $no = 0;
 $lines[0][$xindex] = $x;
 $xindex++;
 $yindex++;
 foreach($value1 as $y => $value){
 $no++;
 $lines[$no][0] = $y;
 $lines[$no][$yindex] = $value;
 }
 }
 $fp = fopen($this -> file, 'w');
 foreach($lines as $i1=>$line){
 fwrite($fp, ($i1?"\n":""));
 end($line);
 $key = key($line);
 reset($line);
 for($i2=0;$i2<=$key;$i2++){
 fwrite($fp, (($i2)?', ':'').'"'.(array_key_exists($i2,$line)?addcslashes($line[$i2],'\"'):"").'"');
 }
 }
 fclose($fp);
 }
 }
 |