后台读取csv文件一键发货
private function import($id) {
//传入文件id
if(!$id){
return false;
}
$fileName = dr_get_file($id);
// 获取文件资源
$file = fopen($fileName, 'r');
// 转编码格式
$_func = function ($data) {
return array_map(function ($value) {
return trim(mb_convert_encoding($value, 'UTF-8', 'gb2312'));
}, $data);
};
// 空读一行 跳过表头
fgetcsv($file);
//读数据并转码
while ($row = fgetcsv($file)) {
$row = $_func($row);
$data = [
'id' => $row[0],
'shipping_name' => $row[2],
'shipping_phone' => $row[3],
'shipping_sn' =>$row[4],
'shipping_city'=> $this->lengcode($row[5])[0],
'shipping_address' =>$this->lengcode($row[5])[1],
];
// 更新订单主表的状态和时间
To Do some code
}
}
**这边是写的一个切割字符的方法**
/**
* $x 所需匹配的字段;
* substr [每个字长度是3]
* mb_strlen第二个参数可根据编码格式选择字的长度
*/
private function lengcode($x){
$y=strpos($x,'市')+3 ;
// 市 之后的文字
$z = substr($x,$y);
// 市之前的文字
$xx= substr($x , 0 , $y);
return [$xx,$z];
}
![ lengcode case :](https://img-blog.csdnimg.cn/2019072517365742.png)
//测试时文件的编码方式要是UTF8
$str='中文a字1符';
echo strlen($str).'<br>';//14
echo mb_strlen($str,'utf8').'<br>';//6
echo mb_strlen($str,'gbk').'<br>';//8
echo mb_strlen($str,'gb2312').'<br>';//10
在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6
}