问题的背景是设置在数据迁移过程中的,需求是这样的,把数据库中的表数据导入到文件中,然后读取此文件,把数据写入到另一个库中。
命令也可以写成:myql -uroot -pmysql test -e "select * from tickets" > /tmp/ticket.txt
其中,test指的是数据库的名称,这样,数据会导入到/tmp/ticket.txt文件中,其中第一行为字段名称,文件如下:
总体的思路是:把数据的每一行作为一个数组,其中key为第一行的字段值,关键代码如下:
1 <?php 2 $file = fopen("/tmp/ticket.txt", "r"); 3 4 $line = fgets($file); 5 6 // 数据之间的分隔符默认为"\t",行分隔符为"\n" 7 // 把第一行转换为数组 8 $key = explode("\t", trim($line, "\n")); 9 print_r($key); 10 11 // 循环处理每一行 12 while(!feof($file)) { 13 $line = fgets($file); 14 if ($line) { 15 16 // array_combine要求两个数组的大小是一致的,否则会返回false 17 $data = array_combine($key, explode("\t", trim($line, "\n"))); 18 print_r($data); 19 } 20 } 21 22 fclose($file);
这样,$data 就是我们要求的数据,就像从数据库中读出的。