欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

[PHP源码阅读]explode和implode函数,explodeimplode_PHP教程

程序员文章站 2022-05-09 14:55:39
...

[PHP源码阅读]explode和implode函数,explodeimplode

explode和implode函数主要用作字符串-数组的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出。在PHP中经常会用到这两个函数,因此有必要了解一下其原理。

explode

array explode ( string $delimiter, string $string, [ , $limit ] )

返回由字符串组成的数组,每个元素都是string的一个子串,被字符串$delimiter作为边界点分割出来。

$limit

如果设置了$limit,且为正数,则返回的数组最多包含$limit个元素,最后的那个元素将包含$string的剩余部分。

如果$limit是负数,则返回除了最后的-$limit个元素外的所有元素。

如果$limit是0,则会被当做1。

$delimiter

如果$delimiter为空,则函数返回FALSE。如果delimiter不在string中,且$limit为负数,则返回空数组。

核心源码

    // 如果delimiter为空字符串,返回FALSE
    if (delim_len == 0) {
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
        RETURN_FALSE;
    }

    // 初始化返回的数组
    array_init(return_value);

    if (str_len == 0) {
          if (limit >= 0) {
              // 如果字符串为空且limit大于等于0,则返回一个包含空字符串的数组,注意此处sizeof("") == 1
            add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
        }
        return;
    }

    // 初始化zstr和zdelim的字符串变量
    ZVAL_STRINGL(&zstr, str, str_len, 0);
    ZVAL_STRINGL(&zdelim, delim, delim_len, 0);
    if (limit > 1) {
        // limit大于1,limit默认是LONG_MAX
        php_explode(&zdelim, &zstr, return_value, limit);
    } else if (limit 0
相关标签: explode