这是我的班级,它读取csv并以某种方式存储信息
<?php
class CSV{
private $data;
function __construct($filename){
$this->data = $this->getDataFromFile($filename);
}
public function __get($property){
if(property_exists($this,$property)){
return $this->$property;
}
}
private function getDataFromFile($filename){
$new_data = array();
$result = array();
if (($handle = fopen($filename,"r")) !== FALSE) {
while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
array_push($result, explode(";", $data[0]));;
}
fclose($handle);
}
$header = $result[0];
$in_columns = array();
for ($j = 0 ; $j < count($result[0]); $j++){
$new = array();
for ($i = 1 ; $i < count($result); $i++){
array_push($new, $result[$i][$j]);
}
array_push($in_columns, $new);
}
$idx = 0;
foreach ($header as $title) {
$new_data[$title] = $in_columns[$idx];
$idx++;
}
//var_dump($new_data);//the content of $new_data its correct
$this->data = $new_data;
}
}
?>
但是我尝试使用班级
$csv = new CSV('./csv/file.csv');
var_dump($csv->__get('data'));
最后一个var_dump显示一个NULL值¿值的赋值有什么问题?看起来对我来说是正确的,哪里有问题?
答案 0 :(得分:0)
问题是您的CSV文件以空行结尾(最后一行后为\n
)。
因此,你正在处理一个空数组,将一个整数变量(null)推入数据数组。
答案 1 :(得分:-1)
您在构造函数中调用$this->getDataFromFile($filename)
并将其值分配给$this->data
。
但是...... getDataFromFile()
的实施实际上并未返回任何值,因此它会将NULL
分配给此属性。
您需要将getDataFromFile()
更改为返回值或
摆脱构造函数中的变量赋值 -
$this->data
已在您的方法中设置。
关于__get()
-
它是magic method。它检查指定的属性是否存在,如果存在 - 返回它的值。你不会这样称呼它。使用以下代码(在公开$this->data
之后):
var_dump($csv->data);
OR 为此属性准备访问者,该访问者将返回此值。