精华内容
下载资源
问答
  • explode

    2017-04-27 18:03:33
    array explode ( string $delimiter, string $string, [, int $limit ] ) 实现流程判断参数 $limit 默认为 PHP_INT_MAX 判断分隔符是否为空,如果为空返回 false 判断字符串长度,如果字符串为空且 $limit >= 0,...
    1. 函数说明

      /**
       * 使用一个字符串分割另一个字符串
       * @param string $delimiter
       * 边界上的分隔字符
       * @param string $string
       * 输入的字符串
       * @param int $limit
       * 如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,
       * 而最后那个元素将包含 string 的剩余部分
       * 如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素
       * 如果 limit 是 0,则会被当做 1,返回整个字符串
       * @return array | false
       */
      explode ( $delimiter, string $string, [, int $limit ] )
    2. 实现流程

      1. 判断参数
        • $limit 默认为 PHP_INT_MAX
        • 判断分隔符是否为空,如果为空返回 false
        • 判断字符串长度,如果字符串为空且 $limit >= 0,返回一个包含空字符串的数组;如果字符串长度小于分隔符长度,返回空数组
      2. 执行逻辑
        根据 $limit 值执行不同逻辑
        • $limit > 1
          if 找不到分隔符,直接返回一个包含整个字符串的数组;
          else 循环找分隔符,将被分隔的字符串加入数组,跳出循环后,将最后一个字符串加入数组
        • $limit < 0
          if 找不到分隔符,返回空数组;
          else 保存每个字符串的起始位置 $positions[],以及字符串数目 $found$toReturn = $limit + $found,根据 $toReturn 以及 $positions[] 返回字符串数组
        • $limit == 0 || $limit == 1
          返回一个包含整个字符串的数组;
    3. 实现代码

      function myExplode($delimiter, $str, $limit = PHP_INT_MAX) {
          //如果分隔符为空,返回false
          if ($delimiter == "") {
              return false;
          }
      
          $arr = array();
          //如果字符串为空且 $limit >= 0 返回空字符串数组
          if (strlen($str) == 0 && $limit >= 0) {
              $arr[] = "";
              return $arr;
          }
          //如果字符串长度<=分隔符长度,返回空数组
          if (strlen($str) <= strlen($delimiter)) {
              return $arr;
          }
      
          if ($limit > 1) {
              $arr = explodePositive($delimiter, $str, $limit);
          } elseif ($limit < 0) {
              $arr = explodeNegative($delimiter, $str, $limit);
          } else {
              $arr[] = $str;
          }
      
          return $arr;
      }
      
      function explodePositive($delimiter, $str, $limit) {
          $start = 0;
          $arr = array();
          if ($pos = strpos($str, $delimiter, $start)) {
              do {
                  $arr[] = substr($str, $start, $pos - $start);
                  $start = $pos + strlen($delimiter);
                  $pos = strpos($str, $delimiter, $start);
              } while ($pos && --$limit > 1);
              // 将末尾的字符串加入数组
              $arr[] = substr($str, $start);
          } else {
              $arr[] = "";
          }
          return $arr;
      }
      
      function explodeNegative($delimiter, $str, $limit) {
          $start = 0;
          $arr = array();
      
          if ($pos = strpos($str, $delimiter, $start)) {
              do {
                  $posArr[] = $pos;
                  $start = $pos + strlen($delimiter);
                  $pos = strpos($str, $delimiter, $start);
              } while ($pos);
              $toReturn = count($posArr) + $limit + 1;
              $start = 0;
              for ($i = 0; $i < $toReturn; $i++) {
                  $arr[$i]  = substr($str, $start, $posArr[$i] - $start);
                  $start = $posArr[$i] + strlen($delimiter);
              }
          }
          return $arr;
      }
      
      //测试代码
      $str = "www.sina.com";
      print_r('explode(\'\', $str)');
      var_dump(explode('',$str));
      print_r('myExplode(\'\',$str)');
      var_dump(myExplode('',$str));
      print_r('explode($str, \'.\')');
      var_dump(explode('.',$str));
      print_r('myExplode($str, \'.\')');
      var_dump(myExplode('.',$str));
      print_r('explode($str, \'.\', 1)');
      var_dump(explode('.', $str, 1));
      print_r('myExplode($str, \'.\', 1)');
      var_dump(myExplode('.',$str,  1));
      print_r('explode($str, \'.\', 2)');
      var_dump(explode('.',$str,  2));
      print_r('myExplode($str, \'.\', 2)');
      var_dump(myExplode('.',$str,  2));
      print_r('explode($str, \'.\', -2)');
      var_dump(explode('.',$str,  -2));
      print_r('myExplode($str, \'.\', -2)');
      var_dump(myExplode('.',$str,  -2));
      print_r('explode($str, \'.\', -3)');
      var_dump(explode('.',$str,  -3));
      print_r('myExplode($str, \'.\', -3)');
      var_dump(myExplode('.',$str,  -3));
      print_r('explode($str, \'.\', -4)');
      var_dump(explode('.',$str,  -4));
      print_r('myExplode($str, \'.\', -4)');
      var_dump(myExplode('.',$str,  -4));
    展开全文
  • hive lateral view 与 explode详解

    万次阅读 多人点赞 2016-07-16 21:28:14
    1.explodehive wiki对于expolde的解释如下:explode() takes in an array (or a map) as an input and outputs the elements of the array (map) as separate rows. UDTFs can be used in the SELECT expression ...

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
    欢迎大家star,留言,一起学习进步

    1.explode

    hive wiki对于expolde的解释如下:

    explode() takes in an array (or a map) as an input and outputs the elements of the array (map) as separate rows. UDTFs can be used in the SELECT expression list and as a part of LATERAL VIEW.

    As an example of using explode() in the SELECT expression list, consider a table named myTable that has a single column (myCol) and two rows:

    这里写图片描述

    Then running the query:

    SELECT explode(myCol) AS myNewCol FROM myTable;
    

    will produce:
    这里写图片描述
    The usage with Maps is similar:

    SELECT explode(myMap) AS (myMapKey, myMapValue) FROM myMapTable;
    

    总结起来一句话:explode就是将hive一行中复杂的array或者map结构拆分成多行。

    使用实例:
    xxx表中有一个字段mvt为string类型,数据格式如下:

    [{“eid”:“38”,“ex”:“affirm_time_Android”,“val”:“1”,“vid”:“31”,“vr”:“var1”},{“eid”:“42”,“ex”:“new_comment_Android”,“val”:“1”,“vid”:“34”,“vr”:“var1”},{“eid”:“40”,“ex”:“new_rpname_Android”,“val”:“1”,“vid”:“1”,“vr”:“var1”},{“eid”:“19”,“ex”:“hotellistlpage_Android”,“val”:“1”,“vid”:“1”,“vr”:“var01”},{“eid”:“29”,“ex”:“bookhotelpage_Android”,“val”:“0”,“vid”:“1”,“vr”:“var01”},{“eid”:“17”,“ex”:“trainMode_Android”,“val”:“1”,“vid”:“1”,“vr”:“mode_Android”},{“eid”:“44”,“ex”:“ihotelList_Android”,“val”:“1”,“vid”:“36”,“vr”:“var1”},{“eid”:“47”,“ex”:“ihotelDetail_Android”,“val”:“0”,“vid”:“38”,“vr”:“var1”}]

    用explode小试牛刀一下:

    select explode(split(regexp_replace(mvt,'\\[|\\]',''),'\\},\\{')) from ods_mvt_hourly where day=20160710 limit 10;
    

    最后出来的结果如下:
    {“eid”:“38”,“ex”:“affirm_time_Android”,“val”:“1”,“vid”:“31”,“vr”:“var1”
    “eid”:“42”,“ex”:“new_comment_Android”,“val”:“1”,“vid”:“34”,“vr”:“var1”
    “eid”:“40”,“ex”:“new_rpname_Android”,“val”:“1”,“vid”:“1”,“vr”:“var1”
    “eid”:“19”,“ex”:“hotellistlpage_Android”,“val”:“1”,“vid”:“1”,“vr”:“var01”
    “eid”:“29”,“ex”:“bookhotelpage_Android”,“val”:“0”,“vid”:“1”,“vr”:“var01”
    “eid”:“17”,“ex”:“trainMode_Android”,“val”:“1”,“vid”:“1”,“vr”:“mode_Android”
    “eid”:“44”,“ex”:“ihotelList_Android”,“val”:“1”,“vid”:“36”,“vr”:“var1”
    “eid”:“47”,“ex”:“ihotelDetail_Android”,“val”:“0”,“vid”:“38”,“vr”:“var1”}
    {“eid”:“38”,“ex”:“affirm_time_Android”,“val”:“1”,“vid”:“31”,“vr”:“var1”
    “eid”:“42”,“ex”:“new_comment_Android”,“val”:“1”,“vid”:“34”,“vr”:“var1”

    2.lateral view

    hive wiki 上的解释如下:

    Lateral View Syntax

    lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (’,’ columnAlias)*
    fromClause: FROM baseTable (lateralView)*

    Description

    Lateral view is used in conjunction with user-defined table generating functions such as explode(). As mentioned in Built-in Table-Generating Functions, a UDTF generates zero or more output rows for each input row. A lateral view first applies the UDTF to each row of base table and then joins resulting output rows to the input rows to form a virtual table having the supplied table alias.

    Example

    Consider the following base table named pageAds. It has two columns: pageid (name of the page) and adid_list (an array of ads appearing on the page)
    这里写图片描述

    An example table with two rows:
    这里写图片描述

    and the user would like to count the total number of times an ad appears across all pages.
    A lateral view with explode() can be used to convert adid_list into separate rows using the query:

    SELECT pageid, adid
    FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;
    

    The resulting output will be
    这里写图片描述
    Then in order to count the number of times a particular ad appears, count/group by can be used:

    SELECT adid, count(1)
    FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid
    GROUP BY adid;
    

    The resulting output will be
    这里写图片描述
    lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

    由此可见,lateral view与explode等udtf就是天生好搭档,explode将复杂结构一行拆成多行,然后再用lateral view做各种聚合。

    3.实例

    还是第一部分的例子,上面我们explode出来以后的数据,不是标准的json格式,我们通过lateral view与explode组合解析出标准的json格式数据:

    SELECT ecrd, CASE WHEN instr(mvtstr,'{')=0
        AND instr(mvtstr,'}')=0 THEN concat('{',mvtstr,'}') WHEN instr(mvtstr,'{')=0
        AND instr(mvtstr,'}')>0 THEN concat('{',mvtstr) WHEN instr(mvtstr,'}')=0
        AND instr(mvtstr,'{')>0 THEN concat(mvtstr,'}') ELSE mvtstr END AS mvt
          FROM ods.ods_mvt_hourly LATERAL VIEW explode(split(regexp_replace(mvt,'\\[|\\]',''),'\\},\\{')) addTable AS mvtstr
            WHERE DAY='20160710' and ecrd is not null limit 10
    

    查询出来的结果:
    xxx
    {“eid”:“38”,“ex”:“affirm_time_Android”,“val”:“1”,“vid”:“31”,“vr”:“var1”}
    xxx
    {“eid”:“42”,“ex”:“new_comment_Android”,“val”:“1”,“vid”:“34”,“vr”:“var1”}
    xxx
    {“eid”:“40”,“ex”:“new_rpname_Android”,“val”:“1”,“vid”:“1”,“vr”:“var1”}
    xxx
    {“eid”:“19”,“ex”:“hotellistlpage_Android”,“val”:“1”,“vid”:“1”,“vr”:“var01”}
    xxx
    {“eid”:“29”,“ex”:“bookhotelpage_Android”,“val”:“0”,“vid”:“1”,“vr”:“var01”
    xxx
    {“eid”:“17”,“ex”:“trainMode_Android”,“val”:“1”,“vid”:“1”,“vr”:“mode_Android”}
    xxx
    {“eid”:“44”,“ex”:“ihotelList_Android”,“val”:“1”,“vid”:“36”,“vr”:“var1”}
    xxx
    {“eid”:“47”,“ex”:“ihotelDetail_Android”,“val”:“1”,“vid”:“38”,“vr”:“var1”}
    xxx
    {“eid”:“38”,“ex”:“affirm_time_Android”,“val”:“1”,“vid”:“31”,“vr”:“var1”}
    xxx
    {“eid”:“42”,“ex”:“new_comment_Android”,“val”:“1”,“vid”:“34”,“vr”:“var1”}

    4.Ending

    Lateral View通常和UDTF一起出现,为了解决UDTF不允许在select字段的问题。
    Multiple Lateral View可以实现类似笛卡尔乘积。
    Outer关键字可以把不输出的UDTF的空结果,输出成NULL,防止丢失数据。

    参考内容:

    1.http://blog.csdn.net/oopsoom/article/details/26001307 lateral view的用法实例
    2.https://my.oschina.net/leejun2005/blog/120463 复合函数的用法,比较详细
    3.http://blog.csdn.net/zhaoli081223/article/details/46637517 udtf的介绍

    展开全文
  • eXplode-开源

    2021-04-24 22:36:39
    eXplode是存储系统检查器。 它包含用于实际代码的通用模型检查器,而不是抽象模型。 使用此模型检查器,eXplode可以针对许多可能的崩溃来系统地检查存储系统,以查找崩溃恢复错误。
  • hive explode

    千次阅读 2018-09-05 13:55:43
    1、hive explode函数可以将一个array或者map展开,其中explode(array)使得结果中将array列表里的每个元素生成一行;explode(map)使得结果中将map里的每一对元素作为一行,key为一列,value为一列,一般情况下,直接...

    1、hive explode函数可以将一个array或者map展开,其中explode(array)使得结果中将array列表里的每个元素生成一行;explode(map)使得结果中将map里的每一对元素作为一行,key为一列,value为一列,一般情况下,直接使用即可,但是遇到以下情况时需要结合lateral view 使用。

    1、No other expressions are allowed in SELECT
            SELECT pageid, explode(adid_list) AS myCol... is not supported
    2、UDTF's can't be nested
            SELECT explode(explode(adid_list)) AS myCol... is not supported
    3、GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY is not supported
            SELECT explode(adid_list) AS myCol ... GROUP BY myCol is not supported

    2、使用方法

    SELECT myCol1, myCol2 FROM baseTable

    LATERAL VIEW explode(col1) myTable1 AS myCol1

    LATERAL VIEW explode(col2) myTable2 AS myCol2;

    展开全文
  • explode() 函数把字符串分割为数组。 语法 explode(separator,string,limit) 参数 描述 separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定所返回的数组元素的最大数目...
  • separator 为空字符串(””),explode() 将返回 FALSE,如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组. explode实例一,代码如下: 复制代码 代码如下:$explode = ...
  • 具体如下:explode(string separator,string string [,int limit])separator 为空字符串(""),explode() 将返回 FALSE,如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的...

    本文实例分析了php中explode函数用法。分享给大家供大家参考。具体如下:

    explode(string separator,string string [,int limit])

    separator 为空字符串(""),explode() 将返回 FALSE,如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组.

    explode实例一,代码如下:

    $explode = "aaa,bbb,ccc,ddd,explode,jjjj";

    $array = explode( ',' ,$explode );

    print_r($array);

    /*

    //结果为

    Array

    (

    [0] => aaa

    [1] => bbb

    [2] => ccc

    [3] => ddd

    [4] => explode

    [5] => jjjj

    )

    */

    我们在处理日期或取得文件扩展名时就可以用explode函数与end函数操作,下面来看实例,代码如下:

    $file ="www.jb51.net.gif";

    $extArray = explode( '.' ,$file );

    $ext = end($extArray);

    echo $ext;

    //输出值为.gif

    使用些函数出现的错误提示有:Note: Separator cannot be an empty string.注意:分割符不可以是空字符串,要分割的字符串为空.

    Definition and Usage 未使用分割函数,可能是你设置的分割字符不存在.

    希望本文所述对大家的PHP程序设计有所帮助。

    展开全文
  • 当我们需要将一个数组根据某个字符或字串进行分割成数组的时候,explode用的很happy,但是你知道~explode是怎么工作的么~~ 首先可以肯定的是,explode也是会分配空间的,毫无疑问。 复制代码 代码如下: //文件1:...
  • PHP explode()函数用法讲解PHP explode() 函数实例把字符串打散为数组:定义和用法explode()函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。注释: "separator" 参数不能是一个空字符串。注释: 该...
  • explode hive

    2019-03-06 19:22:51
    select a.dia.ecuid from (select explode(body.serviceData.vehiclestatus.temstatus.diagnostics) as dia from vehicle_dtc_array where body.serviceData.vehiclestatus.temstatus.diagnostics is not null limi....
  • print_r (explode(.,$str)); ?> 定义和用法 explode()函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。 注释: “separator” 参数不能是一个空字符串。 注释: 该函数是二进制安全的。 语法 ...
  • Hive explode

    2019-01-22 11:03:24
    explode 命令可以将行数据,按指定规则切分出多行 案例一:利用split执行切分规则 有如下数据: 100,200,300 200,300,500 要将上面两行数据根据逗号拆分成多行(每个数字占一行)   实现步骤 1.准备元数据 2....
  • 有关php分割字符串explode函数的用法,使用explode函数将字符串分割到数组,这里给大家总结了几个示例,需要的朋友参考下。
  • 含义:explode()函数基于字符串分隔符拆分字符串,即它将字符串拆分为出自分隔符的位置。此函数返回一个数组,其中包含通过拆分原始字符串形成的字符串,我们可以通过访问数组来轻松检索字符串的每个部分它的语法...
  • 也是php爱好者,和喜好php进阶的朋友们必须控制的东东,学习php的友朋们也晓得,数组也是必需把握的,能够那样道,进阶php,也便是学习php中的数组而在数组中通常要用到分割字符串啊什么的,便要用到explode ,和implode函数...
  • PHP explode函数

    2018-10-28 11:21:22
    explode (PHP 4, PHP 5, PHP 7) explode — 使用一个字符串分割另一个字符串 说明 array explode ( string $delimiter , string $string [, int $limit ] ) 此函数返回由字符串组成的数组,每...
  • 主要介绍了php中explode的负数limit用法,实例分析explode中limit参数为负的用法,具有一定参考借鉴价值,需要的朋友可以参考下
  • Explode in PySpark

    千次阅读 2020-06-17 18:56:57
    Explode in PySpark 有时要将dataframe中的一列变成多列: df = sqlContext.createDataFrame( [('cat \n\n elephant rat \n rat cat', )], ['word'] ) df.select(explode(split(col("word"), "\s+")).alias(...
  • Lateral View explode

    2020-12-10 19:44:28
    Lateral View explode使用过程中的问题 一般使用 select id,con,con_detail from (select 1 as id,'a,b,c' as con union all select 2 as id,null as con union all select 3 as id,'' as con )t lateral view ...
  • explode-on-steel.k

    2021-05-11 15:01:44
    explode-on-steel.k
  • // ### 切分字符串 #### function jb51netcut($start,$end,$file){ $content=explode($start,$file); $content=explode($end,$content[1]); return $content[0]; } ?> explode定义和用法 explode() 函数把字符串...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,093
精华内容 26,437
关键字:

explode