我正在创建一个平面文件数据库,在我用来将字段添加到预先存在的表中的一个函数中,我使用 file() 来获取表,第一行始终包含表的字段,所以我可以轻松地将新字段附加到预先存在的字段中
public function addFields($table_fields) {
// Make sure he opened a connection to the table
if(empty($this->table_name)) throw new Exception('There is no connection to a table opened.');
// Make sure table_fields is an array
if(is_array($table_fields) === FALSE) throw new Exception('TABLE_FIELDS must be an array');
// Build the data
$table_data = file($this->table_name);
$table_header = $table_data[0].self::$field_deliemeter;
$table_header .= implode(self::$field_deliemeter, $table_fields);
$table_data[0] = $table_header;
// Put the data in the table
file_put_contents($this->table_name, implode(self::$linebreak, $table_data));
}
}
问题是,在使用此字段将字段名称添加到预先存在的字段名称后
$table_data = file($this->table_name);
$table_header = $table_data[0].self::$field_deliemeter;
$table_header .= implode(self::$field_deliemeter, $table_fields);
$table_data[0] = $table_header;
第一个索引为 0 似乎包含一个换行符,即使 file() 应该删除它,因为文件因换行符而内爆
例如,如果我的表是
Name Email Password IP Login_Date
somename someemail 123 123 123
然后通过执行此操作运行类
$db = new FlatDB;
$fields = array("Last_Click");
$db->openTable('Test');
$db->addFields($fields);
变成这个
Name Email Password IP Login_Date
Last_Click
Ali ali-trixx@live.com 123 123 123
如您所见,它在第一行之后添加一个随机换行符,我不知道为什么要这样做,因为 file() 应该删除换行符
注意:$field_deliemeter 是 "\t"
有谁知道它为什么要这样做?
通过在插入之前运行print_r($table_data)
,我得到了这个
Array ( [0] => Name Email Password IP Login_Date Last_Click [1] => somename someemail 123 123 123 )
"既然 file() 应该删除换行符,为什么它这样做"?
仅当您使用 FILE_IGNORE_NEW_LINES
. 检查file()
:
$table_data = file($this->table_name, FILE_IGNORE_NEW_LINES);
返回数组中的文件。数组的每个元素对应于 文件中的一行,换行符仍附加。失败时, file() 返回 FALSE。
注意:结果数组中的每一行都将包含行尾, 除非使用 FILE_IGNORE_NEW_LINES,否则你仍然需要使用 rtrim() 如果您不希望出现行尾。