PHP数组函数

来源:互联网 发布:原型图设计软件 编辑:程序博客网 时间:2024/05/16 01:06

这几天在看PHP手册,现在看到了数组函数这一节,觉得孔老夫子的“温故而知新”果然不假,以下特记下我的一些体会:

  1. 将一个1维数组分割成2维数组 array_chunk()
    $input_array = array('a', 'b', 'c', 'd', 'e');
    print_r(array_chunk($input_array, 2
    ));
  2. 比较2个数组,array_diff_assoc()或者array_diff(),如果返回值为空,表示两个数组相同,否则就不同。
  3. 用一个函数来过滤数组中的数值array_filter()

    function odd($var) {
       return (
    $var % 2 == 1);
    }

    function
    even($var) {
       return (
    $var % 2 == 0);
    }

    $array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $array2 = array (6, 7, 8, 9, 10, 11, 12);

    echo
    "Odd :/n";
    print_r(array_filter($array1, "odd"));
    echo
    "Even:/n";
    print_r(array_filter($array2, "even"));
    ?>
  4. array_map() 将回调函数作用到给定数组的单元上,它的参数可以是一个数组,也可以是多个数组,回调函数的参数必须要和调用它的参数相同。
    //单个参数的例子,将数组中的每个值,乘以它的3次方
    function cube($n
    ) {
       return
    $n*$n*$n
    ;
    }

    $a = array(1, 2, 3, 4, 5
    );
    $b = array_map("cube", $a
    );
    print_r($b
    );
    ?>

    //多个数组参数的例子
    function show_Spanish($n, $m) {
       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);
    ?>
    //输出结果
    // printout of $c
    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
    )
  5. array_multisort() 对多个数组或多维数组进行排序
    可以用来一次对多个数组进行排序或者根据某一维对多维数组进行排序。排序时保留原有的键名关联,实现的功能和SQL中的ORDER BY 差不多。
    $ar1 = array ("10", 100, 100, "a");
    $ar2 = array (1, 3, "2", 1
    );
    array_multisort ($ar1, $ar2
    );
    ?>
    //返回结果(保持了原来数组的关联性)
    $ar1 = Array ( [0] => 10 [1] => a [2] => 100 [3] => 100 )
    $ar2 = Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 )

    //实现学生成绩排名
    $grade = array("score" => array(70, 95, 70.0, 60, "70"),
                   "name" => array("Zhang San", "Li Si", "Wang Wu",
                                   "Zhao Liu", "Liu Qi"));
    array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,
                   // 将分数作为数值,由高到低排序
                   $grade["name"], SORT_STRING, SORT_ASC);
                   // 将名字作为字符串,由小到大排序
    ?>
    //输出结果
    array (  'score' =>   array (    0 => 95,    1 => '70',    2 => 70,    3 => 70,    4 => 60,  ),  'name' =>   array (    0 => 'Li Si',    1 => 'Liu Qi',    2 => 'Wang Wu',    3 => 'Zhang San',    4 => 'Zhao Liu',  ),)
  6. array_rand()和shuffle(),一个是从数组中随机的取出一个或多个值,另一个是将数组中的值的
    顺序打乱,然后再可以从中取出值,它们都实现从数组中随机取出数据的功能,可以用于实现诸如抽奖
    之类的功能。
  7. array_reduce()
    将回调函数 function 迭代地作用到 input 数组中的每一个单元中,从而将数组简化为单一的值。
    如果指定了可选参数 initial,该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话
    就作为最终返回值。
    <?php
    function rsum($v, $w) {
      
    $v += $w
    ;
       return
    $v
    ;
    }

    function
    rmul($v, $w
    ) {
      
    $v *= $w
    ;
       return
    $v
    ;
    }

    $a = array(1, 2, 3, 4, 5
    );
    $x
    = array();
    //实现array_sum()功能
    $b = array_reduce($a, "rsum"
    );//15=1+2+3+4+5

    $c = array_reduce($a, "rmul", 10
    );//1200=1*2*3*4*5*10
    $d = array_reduce($x, "rsum", 1
    );//1
    ?>
    这个函数可以实现求一个数组的和(积,差等功能)
  8. array array_reverse ( array array [, bool preserve_keys])
    返回一个单元顺序相反的数组,如果preserve_keys = true,则保留原来的键名,它实现的功能和SQL
    中的order by desc相仿。
    功能相似的函数有:array_multisort(),sort()等
  9. array_search()
    在数组中搜索给定的,如果成功则返回相应的键名
    与之相仿功能的函数有:array_key_exists(), in_array()
  10. array_push() 将一个或多个单元压入数组的末尾(入栈)
    array_pop() 将数组最后一个单元弹出(出栈)
    array_shift() 将数组开头的单元移出数组
    array_unshift() 在数组开头插入一个或多个单元
  11. array_slice() 从数组中取出一段,作为返回值
    array_splice() 把数组中的一部分去掉并用其它值取代,可以用来更改数组中某(几)项的值
  12. array_values() 返回数组中所有的值并给其建立数字索引
    array_keys() 返回数组中所有的键名
  13. array_walk()
    对数组中的每个成员应用用户自定义函数进行处理,可以对数组中的数据进行添加前缀、更改大小写、
    数值计算等多种操作。
    相关的使用用户自定义函数来对数组进行处理的函数还有:
    array_map(), array_reduce(), array_filter()
    <?php
    $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'
    );
    ?>
  14. arsort() 对数组进行逆向排序,并保留索引关系
    asort() 对数组进行排序并保持索引关系
    rsort() 对数组逆向排序,不保留索引关系
    sort() 对数组排序,不保留索引关系
    ksort() 对数组按照键名排序

    uksort() 使用用户自定义的比较函数对数组中的 键名 进行排序
    usort() 使用用户自定义的比较函数对数组中的 值 进行排序

    uasort() 使用用户自定义的比较函数对数组中的 值 进行排序并 保持索引关联


    natsort()用“自然排序”算法对数组排序
    natcasesort()用“自然排序”算法对数组进行不区分大小写字母的排序


    function cmp ($a, $b) {
       if (
    $a == $b) return 0
    ;
       return (
    $a > $b) ? -1 : 1
    ;
    }

    $a = array (4 => "four", 3 => "three", 20 => "twenty", 10 => "ten"
    );

    uksort ($a, "cmp"
    );

    while (list (
    $key, $value) = each ($a
    )) {
       echo
    "$key: $value/n"
    ;
    }
    ?>
  15. compact() 建立一个数组,包括变量名和它们的值
    在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值
    extract() 本函数用来将变量从数组中导入到当前的符号表中
原创粉丝点击