PHP字符截取

新需求:把从美团、饿了么导出的订单进行商品分解,因为导出来的表格中的商品信息存放在一个单元格里,其中含有多个商品和不同的数量,这就要进行分割,处理后导入到数据库中。
一、美团订单商品信息(都只有一个米号喔,只是我打出来一个博客又不显示,只能多打几个):
1、单个商品
香辣口水鸡+红烧茄子双拼饭.(),单价15.8***数量1+餐盒2.0***数量1.0
2、多个商品
奥尔良鸡排+红烧茄子双拼饭.(),单价14.8***数量1+餐盒2.0**数量1.0/「限量抢购」台湾烤香肠.(单点不送,需搭配主餐)(),单价0.99数量1+餐盒1.0***数量1.0

二、饿了么商品信息
1、单个商品
招牌棒棒鸡饭+可乐_1*33.8

2、多个商品
【自选】招牌鸡饭+贡茶._142.800000000000004+大米饭…(不是主食,单点不送)-大米饭_13.0

二、商品信息、数量分割
1、寻找商品信息规律
美团的比较简单,单个商品以“/”进行分割,商品名截取“(”之前的字符串,商品数量就截取“量”子后面的字符串。
饿了么我就不仔细分析,真的很难分(我懒得打字),就不能像人家美团的那种简洁一点?非要用"+"号来分割,然后单个的商品名有的也有“+”号,有的还有好几个,单单为了找这个规律就费我老长时间,哼!用户体验极差!
分割规律在我博客主页的资源里面,思维导图版本需要2个积分,PNG版本不需要积分。如果您有更简单的分割方法(分割规律),请与我留言讨论,不胜感激~~

三、分割时用到的函数、方法

$count = substr_count($value['dishes'], '/');
//统计整个商品信息中有几个“/”(美团)
/**
    * 按符号截取字符串的指定部分
    * @param string $str 需要截取的字符串
    * @param string $sign 需要截取的符号
    * @param int $number 如是正数以0为起点从左向右截 负数则从右向左截
    * @return string 返回截取的内容
    */
    public function cut_str($str,$sign,$number){
        $array=explode($sign, $str);
        $length=count($array);
        if($number<0){
            $new_array=array_reverse($array);
            $abs_number=abs($number);
            if($abs_number>$length){
                return 'error';
            }else{
               return $new_array[$abs_number-1];
            }
        }else{
            if($number>=$length){
               return 'error';
            }else{
               return $array[$number];
            }
        }
    }
$number = substr(strstr($item_data[$i], '数'),0,7);
//strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。他也可以返回字符串之前的部分,详细请看菜鸟教程
$number = substr(strstr($value['dishes'], '数'),0,7);
//substr() 函数返回字符串的一部分。
//substr(string,start,length)
//start为正数 - 在字符串的指定位置开始;
//start为负数 - 在从字符串结尾的指定位置开始;
//start为0 - 在字符串中的第一个字符处开始
str_replace('T', ' ', $value['order_time']);
//str_replace(find,replace,string,count)
//find	必需。规定要查找的值;
//replace	必需。规定替换 find 中的值的值;
//string	必需。规定被搜索的字符串;count	可选。一个变量,对替换数进行计数。
//谁能想到饿了么导出的订单表里的时间中间有个T呢!还得处理一遍,看看人家美团!
if(strpos($data_d[$i],'*')==FALSE){}
//strpos(string,find,start);
//string	必需。规定被搜索的字符串;
//find	必需。规定要查找的字符;start	可选。规定开始搜索的位置。
//返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。注释: 字符串位置从 0 开始,不是从 1 开始。

在这里插入图片描述
需要注意的是,不同文件,字符占用的字节数不一样:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值