• [PHP源码阅读]array_slice和array_splice函数

    array_slice和array_splice函数是用在取出数组的一段切片,array_splice还有用新的切片替换原删除切片位置的功能。类似javascript中的Array.prototype.splice和Array.prototype.slice方法。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    array_slice

    array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
    

    返回数组中指定下标offset和长度length的子数组切片。

    Read more...
  • 红黑树探索笔记

    最近花了些时间重拾数据结构的基础知识,先尝试了红黑树,花了大半个月的时间研究其原理和实现,下面是学习到的知识和一些笔记的分享。望各位多多指教。本次代码的实现请点击:红黑树实现代码

    红黑树基础知识

    定义

    红黑树是带有 color 属性的二叉搜索树,color 的值为红色或黑色,因此叫做红黑树。

    对红黑树的每个结点的结构体定义如下:

    struct RBNode {
         int color;
         void *key;
         void *value;
         struct RBNode *left;
         struct RBNode *right;
         struct RBNode *parent;
    };
    

    Read more...
  • [PHP源码阅读]strtolower和strtoupper函数

    字符串的操作函数中,字符串的大小写转换也算是比较常用的函数,其底层实现也比较简单,下面来一探究竟。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    strtolower

    string strtolower ( string $string )
    

    将字符串转换成小写字符。

    Read more...
  • [PHP源码阅读]count函数

    在PHP编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的判断条件,而在PHP里面对数组的操作是很频繁的,因此count也算是一个常用函数,下面研究一下count函数的具体实现。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    count

    int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )
    

    count函数计算数组或者对象里面的所有元素个数。

    对于对象来说,如果你安装了SPL扩展,可以通过实现Countable接口来调用count函数。Countable接口有且仅有一个方法Countable::count(),该方法的返回count()函数的返回值。

    Read more...
  • [PHP源码阅读]array_pop和array_shift函数

    上篇文章介绍了PHP添加元素到数组的函数,那么当然有从数组中删除元素。array_pop和array_shift只从数组的头或尾删除一个元素。经过阅读源码,发现这两个函数的实现都是调用了同一个函数–_phpi_pop来实现从数组中删除一个数组元素的功能。因此解读时将这两个函数一并讲了。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    函数语法

    array_pop

    mixed array_pop ( array $&array )
    

    array_pop函数弹出并返回数组的最后一个单元,并将数组长度减一。如果array为空则返回NULL。

    Read more...
  • [PHP源码阅读]array_push和array_unshift函数

    在PHP中,在数组中添加元素也是一种很常用的操作,分别有在数组尾部和头部添加元素,看看PHP内部是如何实现数组插入的操作。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    array_push

    int array_push ( array &$array , mixed $value1 [ , mixed $... ] )
    

    array_push函数将array参数看做一个栈,将传递进来的变量压倒array的尾部。array的长度随着被压进去的变量个数增加。下面的代码有意义的效果:

     $array[] = $var; 
    

    Read more...
  • [PHP源码阅读]empty和isset函数

    近日被问到PHP中empty和isset函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究。经过分析可发现两个函数调用的都是同一个函数,因此本文将对两个函数一起分析。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    函数使用格式

    empty

    bool empty ( mixed $var )
    

    判断变量是否为空。

    Read more...
  • [PHP源码阅读]trim、rtrim、ltrim函数

    trim系列函数是用于去除字符串中首尾的空格或其他字符。ltrim函数只去除掉字符串首部的字符,rtrim函数只去除字符串尾部的字符。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    trim

    string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )
    

    参数说明

    character_mask 默认是” \t\n\r\0\x0B”等空白字符。

    使用..可以指定一段范围的字符。此处要注意,”..”左右两边是一对合法的范围值,如果传递的是非法的值会报错。

    Read more...
  • [PHP源码阅读]explode和implode函数

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

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    explode

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

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

    参数说明

    limit

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

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

    Read more...
  • [PHP源码阅读]strpos、strstr和stripos、stristr函数

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    strpos

    mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] )
    

    如果offset指定了,查找会从offset的位置开始。offset不能为负数。

    返回needle第一次出现在haystack的位置。如果在haystack中找不到needle,则返回FALSE。

    needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符。请看下面例子。

    例子

    $str = "hello";
    $pos = strpos($str, 111);
    // 111的ASCII值是o,因此$pos = 4
    

    Read more...