PHP常用内置函数

# 数组部分 #

1.  ## array_chunk($arr, $size [, $preserve_key = false]) ##

    将一个数组分割成多个

    $arr: 需要操作的数组

    $size: 每个数组的单元数目

    $preserve_keys: 设为true,可以保留原来的键名,设为false,每个结果数组从零开始索引

    return 多维数组,从0开始索引,每一维包含了size个元素

    eg:


            $input_array = array('a', 'b', 'c', 'd', 'e');

            print_r(array_chunk($input_array, 2));

            print_r(array_chunk($input_array, 2, true));

        ?>

        Array

        (

            [0] => Array

                (

                    [0] => a

                    [1] => b

                )


            [1] => Array

                (

                    [0] => c

                    [1] => d

                )


            [2] => Array

                (

                    [0] => e

                )


        )

        Array

        (

            [0] => Array

                (

                    [0] => a

                    [1] => b

                )


            [1] => Array

                (

                    [2] => c

                    [3] => d

                )


            [2] => Array

                (

                    [4] => e

                )


        )

2.     ## array_column($arr, $column_key [, $index_key]) ##

    返回$arr中键值为$column_key的列

    $arr: 需要操作的数组,如果是对象数组,只有public属性可以取出,如果要取出private或protected,类必须实现__get()和__isset()魔术方法

    $column_key: 需要返回值的列,可以是索引或关联的键值,也可以是属性值。如是null,返回整个数组,配合index_key可重置数组键

    $index_key: 做为返回数组的索引或键名

    return 从多维数组返回单列数组


    eg:

    从数组中取出first_name列

            $records = array(

                array(

                    'id' => 2135,

                    'first_name' => 'John',

                    'last_name' => 'Doe',

                ),

                array(

                    'id' => 3245,

                    'first_name' => 'Sally',

                    'last_name' => 'Smith',

                ),

                array(

                    'id' => 5342,

                    'first_name' => 'Jane',

                    'last_name' => 'Jones',

                ),

                array(

                    'id' => 5623,

                    'first_name' => 'Peter',

                    'last_name' => 'Doe',

                )

            );

            $first_names = array_column($records, 'first_name');

            print_r($first_names);


            Array

            (

                [0] => John

                [1] => Sally

                [2] => Jane

                [3] => Peter

            )

`

    从数组中取出last_name列,用相应的id做为键值

`


                $last_names = array_column($records, 'last_name', 'id');

                print_r($last_names);

            ?>

            Array

            (

                [2135] => Doe

                [3245] => Smith

                [5342] => Jones

                [5623] => Doe

            )

3. ## array_count_values($arr) ##

    统计数组中所有的值

    $arr 

    return 一个数组,键是$arr中的值,值是$arr中值出现的次数

    eg:


        $array = array(1, "hello", 1, "world", "hello");

        print_r(array_count_values($array));

        ?>

    输出结果:

        Array

        (

            [1] => 2

            [hello] => 2

            [world] => 1

        )

4. ## array_diff_assoc($arr1, $arr2 [,$arr3 ...]) ##

    抽取出两个数组中$arr1独有的元素(键名键值都比较)

    $arr1 从这个数组进行比较

    $arr2 被比较的数组

    return 数组

    eg:


            $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");

            $array2 = array("a" => "green", "yellow", "red");

            $result = array_diff_assoc($array1, $array2);

            print_r($result);

        ?>

        Array

        (

            [b] => brown

            [c] => blue

            [0] => red

        )

    上面的例子中可以看到键值对 "a" => "green" 在两个数组中都有,因此不在本函数的输出中。与此不同,键值对 0 => "red" 出现在输出中是因为第二个参数中的 "red" 的键名是 1。


            $array1 = array(0, 1, 2);

            $array2 = array("00", "01", "2");

            $result = array_diff_assoc($array1, $array2);

            print_r($result);

        ?>

        Array

        (

            [0] => 0

            [1] => 1

        )

    键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

5. ## array_diff_key( $arr1, $arr2 [,$arr3 ... ] ) ##

    根据$arr1的键名和$arr2进行比较,返回只存在$arr1中的元素

    $arr1 从这个数组进行比较

    $arr2 针对此数组进行比较

    return 根据比较键名返回只存在$arr1中的元素

    note 只能比较一维

    eg:


            $array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);

            $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

            var_dump(array_diff_key($array1, $array2));

        ?>

        array(2) 

        {

             ["red"]=>

             int(2)

             ["purple"]=>

             int(4)

        }

6. ## array_diff($arr1, $arr2 [,$arr3 ... ]) ##

    对比$arr1和其他数组,返回$arr1独有的元素,只比较值

    $arr1 要被比对的数组

    $arr2 和这个数组进行比较

    return 返回数组,其中是$arr1中独有的元素

    note 

- 返回的数组中键名保持不变

- 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的

- 本函数只检查了多维数组的一维

eg:



            $array1 = array("a" => "green", "red", "blue", "red");

            $array2 = array("b" => "green", "yellow", "red");

            $result = array_diff($array1, $array2);

            print_r($result);

        ?>

        Array

        (

            [1] => blue

        )

7. ## array_fill_keys( $keys, $value ) ##

    使用指定的键和值填充数组

    $keys 键名数组

    $value 填充数组的键值

    return 数组


    eg:


            $keys = array('foo', 5, 10, 'bar');

            $a = array_fill_keys($keys, 'banana');

            print_r($a);

        ?>

        Array

        (

            [foo] => banana

            [5] => banana

            [10] => banana

            [bar] => banana

        )

8. ## array_fill( $start_index, $num, $value ) ##

    用$value的值将一个数组填充$num个条目,键名由$start_index指定的开始


    eg:



            $a = array_fill(5, 6, 'banana');

            $b = array_fill(-2, 4, 'pear');

            print_r($a);

            print_r($b);

        ?>

        Array

        (

            [5]  => banana

            [6]  => banana

            [7]  => banana

            [8]  => banana

            [9]  => banana

            [10] => banana

        )

        Array

        (

            [-2] => pear

            [0] => pear

            [1] => pear

            [2] => pear

        )

8. ## array_filter($arr [, $callback [, $flag = 0]]) ##

    依次将$arr中的每个值传递到$callback函数中。如果$callback返回true,则$array中的当前值会被包含在返回的结果数组中,该值对应的键名保持不变。

    $arr 要循环的数组

    $callback 使用的回调函数。如果没提供回调函数,则将删除$arr中所有等值为false的条目

    $flag 决定$callback接收的参数的形式

        0 默认接受键值做为唯一的参数

        ARRAY_FILTER_USE_KEY $callback接受键名做为唯一的参数

        ARRAY_FILTER_USE_BOTH $callback同时接受键名和键值


    eg:

        example 1:


            function odd($var)

            {

                // 判断是否为奇数

                return($var & 1);

            }


            function even($var)

            {

                // 判断是否为偶数

                return(!($var & 1));

            }

            $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);

            $array2 = array(6, 7, 8, 9, 10, 11, 12);

            echo "奇数 :\n";

            print_r(array_filter($array1, "odd"));

            echo "偶数:\n";

            print_r(array_filter($array2, "even"));

        ?>

        奇数 :

        Array

        (

            [a] => 1

            [c] => 3

            [e] => 5

        )

        偶数 :

        Array

        (

            [0] => 6

            [2] => 8

            [4] => 10

            [6] => 12

        )


        exemple 2:


            $entry = array

                  (

                     0 => 'foo',

                     1 => false,

                     2 => -1,

                     3 => null,

                     4 => ''

                  );

            print_r(array_filter($entry));

        ?>

        Array

        (

            [0] => foo

            [2] => -1

        )

        example 3:


            $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];

            var_dump(array_filter($arr, function($k) {

                return $k == 'b';

            }, ARRAY_FILTER_USE_KEY));

            //注意: 先$v 后$k

            var_dump(array_filter($arr, function($v, $k) {

                return $k == 'b' || $v == 4;

            }, ARRAY_FILTER_USE_BOTH));

        ?>

        array(1){

                  ["b"]=>

                  int(2)

                }

                array(2) {

                  ["b"]=>

                  int(2)

                  ["d"]=>

                  int(4)

                }    

10. ## array_flip($arr) ##

    返回反转后的$arr,即$arr中的键名变成了键值,而$arr中的键值变成了键名

    note:


-  $arr中的值需要能够做为合法的键名(例如是integer或者string),如果类型不对,会发出警告,并且有问题的键名/键值不会出现在结果中

-  如果$arr中一个值出现多次,则最后一个键将做为输出数组中对应的值,其他键将会被丢弃

    eg:

        example 1:


            $input = array("oranges", "apples", "pears");

            $flipped = array_flip($input);

            print_r($flipped);

        ?>

        Array

        (

            [oranges] => 0

            [apples] => 1

            [pears] => 2

        )

        example 2:


            $input = array("a" => 1, "b" => 1, "c" => 2);

            $flipped = array_flip($input);

            print_r($flipped);

        ?>


        Array

        (

            [1] => b

            [2] => c

        )

11. ## array_intersect_key( $arr1, $arr2 [ ,$arr3 ... ] ) ##

    返回一个数组,包含了$arr1中所有与其他数组中的键名相同的键值对

    note 

- 在 key => value 对中的两个键名仅在 (string) $key1 === (string) $key2 时被认为相等。换句话说,执行的是严格类型检查,因此字符串的表达必须完全一样。

    eg:


            $array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);

            $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

            var_dump(array_intersect_key($array1, $array2));

        ?>


        array(2) 

            {

              ["blue"]=>

              int(1)

              ["green"]=>

              int(3)

            }

    上例中可以看到只有 'blue' 和 'green' 两个键名出现在两个数组中,因此被返回。此外注意 'blue' 和 'green' 的值在两个数组中是不同的。但因为只检查键名,因此还是匹配。返回的值只是 array1 中的。

12. ## array_intersect($arr1, $arr2 [, $arr3 ... ]) ##

    返回一个数组,包含了所有在$arr1中出现且在其他参数数组也出现了的数组的值,键名保持不变

    note:

- 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的.

    eg:


                $array1 = array("a" => "green", "red", "blue");

                $array2 = array("b" => "green", "yellow", "red");

                $result = array_intersect($array1, $array2);

                print_r($result);

            ?>


            Array

            (

                [a] => green

                [0] => red

            )

13. ## array_key_exists($key, $arr) ##

    数组里含有键$key时,返回true。$key可以时任何能做为数组索引的值。

    note:

- 仅仅搜索第一维,多维数组里嵌套的键不会被搜索到


    eg:



            $search_array = array('first' => 1, 'second' => 4);

            if (array_key_exists('first', $search_array)) {

                echo "The 'first' element is in the array";

            }

        ?>

14. ## array_keys( $arr [, $search_value=null [, $strict = false]] ) ##

    返回数组中部分的或所有的键名

    $search_value 如果指定了这个参数,只有包含这些值的键才会返回

    $strict 判断在搜索的时候是否该使用严格的比较(===)


    eg:


            $array = array(0 => 100, "color" => "red");

            print_r(array_keys($array));


            $array = array("blue", "red", "green", "blue", "blue");

            print_r(array_keys($array, "blue"));


            $array = array("color" => array("blue", "red", "green"),

                           "size"  => array("small", "medium", "large"));

            print_r(array_keys($array));

        ?>


        Array

        (

            [0] => 0

            [1] => color

        )

        Array

        (

            [0] => 0

            [1] => 3

            [2] => 4

        )

        Array

        (

            [0] => color

            [1] => size

        )

15. ## array_map( $callback, $arr1 [, $arr2 ... ] ) ##

    循环数组,为数组的每个元素应用回调函数

    note:

- callback函数形参的数量必须和传给array_map()传入数组的数量一致


    eg:

        example 1:


            function cube($n)

            {

                return($n * $n * $n);

            }

            $a = array(1, 2, 3, 4, 5);

            $b = array_map("cube", $a);

            print_r($b);

        ?>

        Array

        (

            [0] => 1

            [1] => 8

            [2] => 27

            [3] => 64

            [4] => 125

        )

        example 2: 使用匿名函数


            $func = function($value) {

                return $value * 2;

            };

            print_r(array_map($func, range(1, 5)));

        ?>

        Array

        (

            [0] => 2

            [1] => 4

            [2] => 6

            [3] => 8

            [4] => 10

        )    

        example 3:


            function show_Spanish($n, $m)

            {

                //PHP会在双引号中的字符串中寻找变量进行替换

                return("The number $n is called $m in Spanish");

            }

            function map_Spanish($n, $m)

            {

                return(array($n => $m));

            }

            $a = array(1, 2, 3, 4, 5);

            $b = array("uno", "dos", "tres", "cuatro", "cinco");

            $c = array_map("show_Spanish", $a, $b);

            print_r($c);

            $d = array_map("map_Spanish", $a , $b);

            print_r($d);

        ?>    

        Array

        (

            [0] => The number 1 is called uno in Spanish

            [1] => The number 2 is called dos in Spanish

            [2] => The number 3 is called tres in Spanish

            [3] => The number 4 is called cuatro in Spanish

            [4] => The number 5 is called cinco in Spanish

        )

        Array

        (

            [0] => Array

                (

                    [1] => uno

                )


            [1] => Array

                (

                    [2] => dos

                )


            [2] => Array

                (

                    [3] => tres

                )


            [3] => Array

                (

                    [4] => cuatro

                )


            [4] => Array

                (

                    [5] => cinco

                )

        )

        - 传入两个及以上的数组时,它们元素数量将会相同。

        - 因为回调函数会并行地处理相互对应的元素。 

        - 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。

        example 4:多维数组


            $a = array(1, 2, 3, 4, 5);

            $b = array("one", "two", "three", "four", "five");

            $c = array("uno", "dos", "tres", "cuatro", "cinco");

            $d = array_map(null, $a, $b, $c);

            print_r($d);

        ?>

        Array

        (

            [0] => Array

                (

                    [0] => 1

                    [1] => one

                    [2] => uno

                )


            [1] => Array

                (

                    [0] => 2

                    [1] => two

                    [2] => dos

                )


            [2] => Array

                (

                    [0] => 3

                    [1] => three

                    [2] => tres

                )


            [3] => Array

                (

                    [0] => 4

                    [1] => four

                    [2] => cuatro

                )


            [4] => Array

                (

                    [0] => 5

                    [1] => five

                    [2] => cinco

                )


        )        

16. ## array_merge_recursive( $arr1 [, $arr2 ... ] ) ##

    将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。

    如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,并且如果其子元素中还有相同的字符串键名,则递归其子元素。

    如果输入的数组中有相同的数字键名,后一个值不会覆盖原来的值,而是附加到后面。


    eg:



            $ar1 = array("color" => array("favorite" => "red"), 5);

            $ar2 = array(10, "color" => array("favorite" => "green", "blue"));

            $result = array_merge_recursive($ar1, $ar2);

            print_r($result);

        ?>


        Array

        (

            [color] => Array

                (

                    [favorite] => Array

                        (

                            [0] => red

                            [1] => green

                        )


                    [0] => blue

                )


            [0] => 5

            [1] => 10

        )

17. ## array_merge($arr1 [, $arr2 ... ]) ##

    合并一个或多个数组

    将一个或多个数组的单元合并起来,一个数组的值附加在前一个数组的后面。

    如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。

    数组中包含的数字键名,后面的值将不会覆盖原来的值,而是重编索引附加到后面

    如果只给了一个数组并且该数组时数字索引的,则键名会以连续方式重新索引。

    eg:


        example 1:


            $array1 = array("color" => "red", 2, 4);

            $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);

            $result = array_merge($array1, $array2);

            print_r($result);

        ?>

        Array

        (

            [color] => green

            [0] => 2

            [1] => 4

            [2] => a

            [3] => b

            [shape] => trapezoid

            [4] => 4

        )

        example 2:



            $array1 = array();

            $array2 = array(1 => "data");

            $result = array_merge($array1, $array2);

        ?>

        - 别忘了数字键名将会被重新编号!

        Array

        (

            [0] => data

        )

        example 3:

        - 如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符:


            $array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');

            $array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');

            $result = $array1 + $array2;

            var_dump($result);

        ?>        

        - 第一个数组的键名将会被保留。

        - 在两个数组中存在相同的键名时,第一个数组中的同键名

        - 的元素将会被保留,第二个数组中的元素将会被忽略

        array(5) {

          [0]=>

          string(6) "zero_a"

          [2]=>

          string(5) "two_a"

          [3]=>

          string(7) "three_a"

          [1]=>

          string(5) "one_b"

          [4]=>

          string(6) "four_b"

        }

18. ## array_pad($arr1, $size, $value) ##

    返回一个$arr1的拷贝,并用$value将其填补到$size指定的长度。

    如果$size为正,则填补到数组的右侧,如果为负则从左侧开始填补。

    如果$size的绝对值小于或者等于$arr1的长度则没有任何填补。

    eg:


        $input = array(12, 10, 9);


        $result = array_pad($input, 5, 0);

        // result is array(12, 10, 9, 0, 0)


        $result = array_pad($input, -7, -1);

        // result is array(-1, -1, -1, -1, 12, 10, 9)


        $result = array_pad($input, 2, "noop");

        // not padded

        ?>

19. ## array_replace_recursive( $arr1, $arr2 [, $arr3] ) ##

    使用传递的数组递归替换第一个数组的元素

    note:

- 使用后面数组元素的值替换数组$arr1的值。

        如果一个键存在于第一个数组同时也存在与第二个数组,它的值将被第二个数组中的值替换。

        如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。

        如果一个键仅存在于第一个数组,它将保持不变。

        如果传递了多个替换数组,它们将被按照顺序依次处理,后面的数组将覆盖前面的数组。

- 该方法时递归的,它将遍历数组并将相同的处理应用到数组的内部值。

- 如果数组$arr1中的值时标量,它的值将被$arr2中的值替换,这时它可能时一个标量或一个数组。

        如果$arr1和$arr2中的值都是数组,该函数将会递归地替换它们各自的值。

    eg:


        $base = array('citrus' => array("orange") , 'berries' => array("blackberry", "raspberry"), 'others' => 'banana' );

        $replacements = array('citrus' => 'pineapple', 'berries' => array('blueberry'), 'others' => array('litchis'));

        $replacements2 = array('citrus' => array('pineapple'), 'berries' => array('blueberry'), 'others' => 'litchis');


        $basket = array_replace_recursive($base, $replacements, $replacements2);

        print_r($basket);

        ?>

        Array

        (

            [citrus] => Array

                (

                    [0] => pineapple

                )


            [berries] => Array

                (

                    [0] => blueberry

                    [1] => raspberry

                )


            [others] => litchis

        )

20. ## array_replace( $arr1, $arr2 [, $arr3 ... ] ) ##

    使用传递的数组替换第一个数组的元素

- 使用后面数组元素相同的key的值替换$arr1中的值。

        如果一个键存在于第一个数组同时也存在于第二个数组,它的值将被第二个数组中的值替换。

        如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。

        如果一个键仅存在于第一个数组,则保持不变。

        如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。

- 该函数时非递归的,它将第一个数组的值进行替换而不管第二个数组中是什么类型。

    eg:


        $base = array("orange", "banana", "apple", "raspberry");

        $replacements = array(0 => "pineapple", 4 => "cherry");

        $replacements2 = array(0 => "grape");


        $basket = array_replace($base, $replacements, $replacements2);

        print_r($basket);

        ?>


        Array

        (

            [0] => grape

            [1] => banana

            [2] => apple

            [3] => raspberry

            [4] => cherry

        )

21. ## array_search( $value, $arr [, $strict = false] ) ##

    在数组中搜索给定的值,如果成功则返回首个相应的键名,否则返回false。

    如果$strict为true,则将检查完全相同的元素,即检查类型、数值,并且对象必须是同一个实例。


    eg:


            $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');


            $key = array_search('green', $array); // $key = 2;

            $key = array_search('red', $array);   // $key = 1;

        ?>

22. ## array_slice($arr1, $offset [, $length [, $preserve_keys]]) ##

    根据$offset和$length返回$arr1中的一段序列

        $offset 

        - $offset为正,则序列从$arr1中的此偏移量开始

        - $offset为负,则序列从$arr1中距离末端这么远的地方开始

        $length

        - $length为正,则序列中将有这么多的单元。

        - $length为负,则序列终止在距离数组末端这么远的地方

        - $length省略,则序列将从offset开始一直到array的末端

        $preserve_keys

        - false时,会重新排序并重置数组的数字索引

        - true时,不会重新排序,不重置数组的数字索引

    eg:


        $input = array("a", "b", "c", "d", "e");


        $output = array_slice($input, 2);      // returns "c", "d", and "e"

        $output = array_slice($input, -2, 1);  // returns "d"

        $output = array_slice($input, 0, 3);   // returns "a", "b", and "c"


        print_r(array_slice($input, 2, -1));   //Array([0] => c,[1] => d)

        print_r(array_slice($input, 2, -1, true));    //Array([2] => c,[3] => d)

        ?>

23. ## array_udiff( $arr1, $arr2 [, $arr3 ...],$value_compare_func ) ##

    使用回调函数比较数据,计算数组的不同之处。

    value_compare_func 在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数。

    该回调函数只是比较了传入的各个数组中的对应的值的大小,以此来比较。

    return $arr1里没有出现在其他参数里的所有值

    eg:


            $array1 = array('absdf','fdsfsdf','33252');


            $array2 = array('asdfsdff','absdf','3dsfs');

            function compare_by_area($a, $b) {

                if ($a < $b) {

                    return -1;

                } elseif ($a > $b) {

                    return 1;

                } else {

                    return 0;

                }

            }

            print_r(array_udiff($array1, $array2, 'compare_by_area'));

        ?>

        Array

        (

           [1] => fdsfsdf

           [2] => 33252

        )        

24. ## array_unique( $arr1 [, $sort_flags = SORT_STRING] ) ##

    接受$arr1做为输入并返回没有重复值的新数组,键名不变。

    eg:



        $input = array("a" => "green", "red", "b" => "green", "blue", "red");

        $result = array_unique($input);

        print_r($result);

        ?>


        Array

        (

            [a] => green

            [0] => red

            [1] => blue

        )

25. ## array_values($arr) ##

    返回$arr中所有的值并给其建立数字索引

    eg:


        $array = array("size" => "XL", "color" => "gold");

        print_r(array_values($array));

        ?>


        Array

        (

            [0] => XL

            [1] => gold

        )

27. ## array_walk_recursive( $arr, $callback [, $userdata = NULL] ) ##

    将用户自定义函数$callback应用到$arr数组中的每个单元。本函数会递归到更深层的数组中去

    $callback 典型情况下$callback会接受两个参数,$arr的值做为第一个,键名做为第二个

    $userdata 如果提供了userdata,将被做为第三个参数传递给$callback

    note:

     - 如果$callback需要直接作用于数组中的值,则给$callback的第一个参数指定为引用,这样任何对这些单元的改变也会改变原始数组本身。


    eg:


        $sweet = array('a' => 'apple', 'b' => 'banana');

        $fruits = array('sweet' => $sweet, 'sour' => 'lemon');


        function test_print($item, $key)

        {

            echo "$key holds $item\n";

        }


        array_walk_recursive($fruits, 'test_print');

        ?>    

        a holds apple

        b holds banana

        sour holds lemon

    note:

- 注意上例中的键'sweet'并没有显示出来。任何其值为array的键都不会被传递到回调函数中去

26. ## array_walk( $arr, $callback [, $userdata ] ) ##

    将用户自定义函数$callback应用到数组中的每个单元

    array_walk()不会受到$arr内部数组指针的影响。

    array_walk()会遍历整个数组而不管指针的位置。

    eg:



        $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");


        function test_alter(&$item1, $key, $prefix)

        {

            $item1 = "$prefix: $item1";

        }


        function test_print($item2, $key)

        {

            echo "$key. $item2
\n";

        }


        echo "Before ...:\n";

        array_walk($fruits, 'test_print');


        array_walk($fruits, 'test_alter', 'fruit');

        echo "... and after:\n";


        array_walk($fruits, 'test_print');

        ?>

        Before ...:

        d. lemon

        a. orange

        b. banana

        c. apple

        ... and after:

        d. fruit: lemon

        a. fruit: orange

        b. fruit: banana

        c. fruit: apple

28. ## count( $arr [, $mode ] ) ##

    统计出数组里所有元素的数量,或者对象里的东西

    $mode 如果可选的$mode参数设为COUNT_RECURSIVE(或1),count()将递归地对数组计数,对计算多维数组的所有单元尤其有用。

29. ## in_array( $value, $arr [, $strict ... ] ) ##

    检查数组中是否存在某个值

    $strict 该值为true则in_array()会检查$value的类型是否和$arr中的相同

30. ## list( $var1 [, $var2 ... ] ) ##

    像array()一样,这不是真正的函数,而是语言构造。

    list()可以在单次操作就为一组变量赋值。

    note:

- 仅能用于数字索引的数组,并假定数字索引从0开始


    eg:

        example 1:


            $info = array('coffee', 'brown', 'caffeine');


            // 列出所有变量

            list($drink, $color, $power) = $info;

            echo "$drink is $color and $power makes it special.\n";


            // 列出他们的其中一个

            list($drink, , $power) = $info;

            echo "$drink has $power.\n";


            // 或者让我们跳到仅第三个

            list( , , $power) = $info;

            echo "I need $power!\n";


            // list() 不能对字符串起作用

            list($bar) = "abcde";

            var_dump($bar); // NULL

        ?>

        example 2:


            list($a, list($b, $c)) = array(1, array(2, 3));


            var_dump($a, $b, $c);

        ?>


        int(1)

        int(2)

        int(3)        


        example 3:


            $info = array('coffee', 'brown', 'caffeine');


            list($a[0], $a[1], $a[2]) = $info;


            var_dump($a);

        ?>        

        PHP 7:

        array(3) {

          [0]=>

          string(6) "coffee"

          [1]=>

          string(5) "brown"

          [2]=>

          string(8) "caffeine"

        }

        PHP 5:

        array(3) {

          [2]=>

          string(8) "caffeine"

          [1]=>

          string(5) "brown"

          [0]=>

          string(6) "coffee"

        }        


        - PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。

        example 4:


            $foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');

            $foo[1] = 'd';

            list($x, $y, $z) = $foo;

            var_dump($foo, $x, $y, $z);

        ?>

        array(4) {

          [2]=>

          string(1) "a"

          ["foo"]=>

          string(1) "b"

          [0]=>

          string(1) "c"

          [1]=>

          string(1) "d"

        }

        string(1) "c"

        string(1) "d"

        string(1) "a"

        - list() 使用 array 索引的顺序和它何时定义无关。

31. ## range($start, $end [, $step = 1]) ##

    $start 序列的第一个值

    $end 序列结束于$end值

    $step 步长,应该为正值,不设置step则默认为1.

    return 返回的数组中从$start到$end的单元


    eg:


            // array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

            foreach (range(0, 12) as $number) {

                echo $number;

            }


            //  step 参数

            // array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

            foreach (range(0, 100, 10) as $number) {

                echo $number;

            }


            // 字符序列的使用

            // array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');

            foreach (range('a', 'i') as $letter) {

                echo $letter;

            }

            // array('c', 'b', 'a');

            foreach (range('c', 'a') as $letter) {

                echo $letter;

            }

        ?>

    note:

- 字符序列值仅限单个字符。 如果长度大于1,仅仅使用第一个字符。

# 字符串部分 #

1. ## chr( $ascii ) ##

    返回相对应于ascii所指定的单个字符。

    eg:


        $str = "The string ends in escape: ";

        $str .= chr(27); /* 在 $str 后边增加换码符 */


        /* 通常这样更有用 */


        $str = sprintf("The string ends in escape: %c", 27);

        ?>    

2. ## count_chars( $string [, $mode = 0] ) ##

    统计string中每个字节值(0...255)出现的次数,使用多种模式返回结果。

    $mode 

- 0 - 以所有的每个字节值作为键名,出现次数作为值的数组。

    - 1 - 与 0 相同,但只列出出现次数大于零的字节值。

    - 2 - 与 0 相同,但只列出出现次数等于零的字节值。

    - 3 - 返回由所有使用了的字节值组成的字符串。

    - 4 - 返回由所有未使用的字节值组成的字符串。

eg:


        $data = "Two Ts and one F.";


        foreach (count_chars($data, 1) as $i => $val) {

           echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n";

        }

        ?>    

        There were 4 instance(s) of " " in the string.

        There were 1 instance(s) of "." in the string.

        There were 1 instance(s) of "F" in the string.

        There were 2 instance(s) of "T" in the string.

        There were 1 instance(s) of "a" in the string.

        There were 1 instance(s) of "d" in the string.

        There were 1 instance(s) of "e" in the string.

        There were 2 instance(s) of "n" in the string.

        There were 2 instance(s) of "o" in the string.

        There were 1 instance(s) of "s" in the string.

        There were 1 instance(s) of "w" in the string.

3. ## explode( $delimiter, $string [, $limit ] ) ##

    使用一个字符串分割另一个字符串

    $limit 

- 正数 则返回的数组包含最多limit个元素,而最后那个元素将包含string剩余的部分

- 负数 返回除了最后的-limit个元素外的所有元素

- 0   会被当成1


    eg:

            example 1:


            // 示例 1

            $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";

            $pieces = explode(" ", $pizza);

            echo $pieces[0]; // piece1

            echo $pieces[1]; // piece2


            // 示例 2

            $data = "foo:*:1023:1000::/home/foo:/bin/sh";

            list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);

            echo $user; // foo

            echo $pass; // *

            ?>


            example 2:


            /* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */

            $input1 = "hello";

            $input2 = "hello,there";

            var_dump( explode( ',', $input1 ) );

            var_dump( explode( ',', $input2 ) );


            ?>

            array(1)

            (

                [0] => string(5) "hello"

            )

            array(2)

            (

                [0] => string(5) "hello"

                [1] => string(5) "there"

            )

            example 3:


            $str = 'one|two|three|four';


            // 正数的 limit

            print_r(explode('|', $str, 2));


            // 负数的 limit(自 PHP 5.1 起)

            print_r(explode('|', $str, -1));

            ?>

            Array

            (

                [0] => one

                [1] => two|three|four

            )

            Array

            (

                [0] => one

                [1] => two

                [2] => three

            )

6. ## implode( $glue, $arr ) ##

    使用$glue将一维数组的值连接为一个字符串

7. ## lcfirst( $str ) ##

    使一个字符串的第一个字符小写

8. ## ltrim( $str [, $character_mask ] ) ##

    删除字符串开头的空白字符(或其他字符)

    $character_mask 可以指定想要删除的字符,简单的列出想要删除的所有字符即可。使用..可以指定字符的范围。

    eg:



            $text = "\t\tThese are a few words :) ...  ";

            $binary = "\x09Example string\x0A";

            $hello  = "Hello World";

            var_dump($text, $binary, $hello);


            print "\n";


            $trimmed = ltrim($text);

            var_dump($trimmed);


            $trimmed = ltrim($text, " \t.");

            var_dump($trimmed);


            $trimmed = ltrim($hello, "Hdle");

            var_dump($trimmed);


            // 删除 $binary 开头的 ASCII 控制字符

            // (从 0 到 31,包括 0 和 31)

            $clean = ltrim($binary, "\x00..\x1F");

            var_dump($clean);


        ?>

        string(32) "        These are a few words :) ...  "

        string(16) "    Example string"

        string(11) "Hello World"


        string(30) "These are a few words :) ...  "

        string(30) "These are a few words :) ...  "

        string(7) "o World"

        string(15) "Example string"


9. ## money_format( $format, $number ) ##

    将数字格式化成货币字符串

10. ## nl2br( $str [, $is_xhtml ] ) ##

    在字符串$str所有新行之前插入'
'或'
',并返回

    eg:

        example 1:


            echo nl2br("foo isn't\n bar");

        ?>

        foo isn't

         bar

        example 2:


            echo nl2br("Welcome\r\nThis is my HTML document", false);

        ?>

        Welcome

        This is my HTML document

        example 3:


            $string = "This\r\nis\n\ra\nstring\r";

            echo nl2br($string);

        ?>

        This

        is

        a

        string

11. ## number_format() ##

    以千位分隔符方式格式化一个数字

    本函数可以接受一个、两个或者四个参数,不能是三个

    number_format( $num [, $decimals ] )

    number_format( $num, $decimals, $dec_point = '.', $thousands_sep = ',' )

    eg:


            $number = 1234.56;


            // english notation (default)

            $english_format_number = number_format($number);

            // 1,235


            // French notation

            $nombre_format_francais = number_format($number, 2, ',', ' ');

            // 1 234,56


            $number = 1234.5678;


            // english notation without thousands separator

            $english_format_number = number_format($number, 2, '.', '');

            // 1234.57

        ?>


12. ## ord( $string ) ##

    返回字符的ascii码值,如传入字符串,返回字符串第一个字符的ascii码值。

13. ## rtrim( $str [, $character_mask ] ) ##

    删除字符串末端的空白字符或其他字符

16. ## sscanf() ##

17. ## printf() ##

17. ## str_ireplace() ##

18. ## str_pad() ##

19. ## str_repeat() ##

20. ## str_replace() ##

21. ## str_split() ##

22. ## str_word_count() ##

23. ## strip_tags() ##

24. ## stripos() ##

25. ## stristr() ##

26. ## strlen() ##

27. ## strnatcasecmp() ##

28. ## strnatcmp() ##

29. ## strpbrk() ##

30. ## strpos() ##

31. ## strrchr() ##

32. ## strripos() ##

33. ## strrpos() ##

34. ## strspn() ##

35. ## strstr() ##

36. ## strtok() ##

37. ## strtolower() ##

38. ## strtoupper() ##

39. ## strtr() ##

40. ## substr_count() ##

41. ## substr_replace() ##

42. ## substr() ##

43. ## trim() ##

44. ## ucfirst() ##

45. ## ucwords() ##

46. ## wordwrap() ##

# 日期和时间 #

1. ## date() ##

2. ## getdate() ##

3. ## strtotime() ##

4. ## time() ##

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容