首页 > php函数 > PHP数组排序实例与函数

PHP数组排序实例与函数

PHP4函数手册 array里的算是看完咯, 明天在看看最新的手册。。。。

array_values($arr) array

返回数组所有元素

<?php
    $arr = array(
        "a",
        "b",
        "c"
    );
    $arr = array_flip($arr); //反转数组的下标和值现在的$arr = array(0, 1, 2);
    $arr = array_values($arr); //返回数组$arr中的所有元素
    print_r($arr); //结果: array(0, 1, 2);
?>

array_walk($arr, $func, [$data]) bool

使用用户自定义的函数遍历所有的元素,返回true/false

注意:此函数只处理数组的第一维

$func是一个函数名

默认会传入两个参数 第一个 $arr的值, 第二个$arr的下标, 一对一对的传哦

<?php
    $arr = array(
        'a',
        'b',
        'c'
    );
    array_walk($arr, 'test'); //这里第二个参数test就是函数名
    function test(&$val, $key) //这里第一个参数加上引用, 那么修改$val就等于修改$arr中的元素
    {
        $val = 'x_' . $val; //这里给他加一个前缀
    }
    print_r($arr); //输出结果 array('x_a', 'x_b', 'x_c');
    //这里如果把$arr改成 $arr = array('a', 'b', 'c', array(1, 2, 3)); 打印结果将是 array('x_a', 'x_b', 'x_c', 'x_Array');
?>

现在传入第三那个参数$data, 如果有传入第三个参数,那么第三个参数将传给第二个参数定义的函数当中的第三个参数

<?php
    array_walk($arr, 'test', 'x_');
    function test(&$val, $key, $prefix) {
        $val = $prefix . $val; //其实这里的$prefix就是上面的x_
    }
    print_r($arr); //输出结果和上面一样 array('x_a', 'x_b', 'x_c');
?>

arsort($arr) bool

对数组$arr进行倒序排列并保留下标和值的关系,如果排序成功返回true 否则返回 false

此函数只处理数组的第一维

<?php
    $arr = array(
        'a' => 'a',
        'b' => 'b',
        'c' => 'c'
    );
    arsort($arr);
    print_r($arr); //打印结果: array('c' => 'c', 'b' => 'b', 'a' => 'a'); 如果有数字那么数字会在字符前面
?>

asort($arr) bool

对数组$arr进行正序排列也就是a-z这样排列, 返回值和上面一样

此函数也保留下标和值的关系

<?php
    $arr = array(
        'a' => 'a',
        'b' => 'b',
        'c' => 'c'
    );
    asort($arr);
    print_r($arr); //结果没变, 就是原那数组
    $arr = array(
        'c' => 'c',
        'b' => 'b',
        'a' => 'a'
    );
    asort($arr);
    print_r($arr); //结果:array('a' => 'a', 'b' => 'b', 'c' => 'c');
?>

compact($varname, ...., $varname) array

接受n个$varname并将$varname当做下标$varname的值当做值创建一个数组$varname可以为数组

解释不清楚, 看例子

<?php
    $a = "变量a";
    $b = "变量b";
    $arr = compact('a', 'b'); //这里传入 a b 分别为上面定义的变量名称
    print_r($arr); //打印结果为 array('a' => '变量a', 'b' => '变量b');
    //还可以把变量名称当做数组传入
    $vars = array(
        'a',
        'b'
    );
    $arr = compact($vars);
    print_r($arr); //结果和上面一样, 其实这个函数就是做extract的相反操作
?>

extract($arr, $type, $prefix) int

将数组$arr的下标当做变量名, 值当做变量的值

$arr 目标数组

$type 这个是遇过遇到相同下标使用什么方式处理, 值是PHP已经定义了的常量

EXTR_OVERWRITE 如果相同, 那么就覆盖前面的那个变量, 默认就是这个

EXTR_SKIP 如果相同, 不覆盖前面那个变量

EXTR_PREFIX_SAME 如果相同, 那么使用第三个参数$prefix加到变量名前

EXTR_PREFIX_ALL 把所有变量名称都加上$prefix当做前缀

注意在$type为EXTR_PREFIX_SAME或EXTR_PREFIX_ALL时才需要传入参数$prefix, 不然传了也没用。。。

例子

<?php
    $arr = array(
        'a' => '变量a',
        'b' => '变量b'
    );
    extract($arr, EXTR_OVERWRITE); //如果有相同,那么覆盖
    echo $a; //输出结果将是 '变量a'
    echo $b; //结果: '变量b'
    $arr = array(
        'a' => '变量a',
        'b' => '变量b',
        'a' => '第二个变量a'
    ); //这里有两个元素下标都为a
    extract($arr);
    echo $a; //输出结果是: '第二个变量a' 很明显已经覆盖了 '变量a' 因为默认第二个参数是 EXTR_OVERWRITE
?>

count($arr) int

统计数组中的元素的数目

<?php
    $arr = array(
        'a',
        'b'
    );
    echo count($arr); //很明显结果为2
?>

current($arr) mixed

返回数组中当前指针所指的元素,此函数别名 pos

<?php
    $arr = array(
        'a',
        'b',
        'c'
    );
    echo current($arr); //结果为 'a'
    echo next($arr); //指针向下一个移动,所以现在指针所指的是b 输出结果当然为 'b'
    echo current($arr); //结果又是b 因为当前指针就在b这哦
    echo end($arr) //指针移动到数组最后, 并返回结果, 所以结果为c
    echo prev($arr); //指针向上一个移动, 结果b
    echo key($arr); //返回指针所指元素的下标 因为上面指针到了b那么所有 结果为1 因为b的下标就是1
    echo reset($arr); //重置指针都数组开头 结果a
?>

each($arr) array

重数组$arr中返回一对 key/value也就是 下标/值

<?php
    $arr = array(
        'a' => 1,
        'b' => 2,
        'c' => c
    );
    $res = each($arr);
    print_r($res); //结果为 array('0' => 'a', 'key' => 'a', 1 => 1, 'value' => 1)
    //返回结果 0 和 key 都代表 下标 1 和 value 代表值
    //没使用一次each数组内部指针就会向下移动一次, 如果已经是数组末端, 将返回false
    $res = each($arr);
    print_r($res); //结果就会变成 array('0' => 'b', 'key' => 'b', 1 => 2, 'value' => 2)
?>
list($val, .. , [$val]) void 无返回值
把数组中的值赋给一些变量$val
<?php
    $arr = array(
        '颜色',
        '字母A',
        '字母B'
    );
    list($color, $a, $b) = $arr; //注意这里list的参数$val 位置是和数组中的位置对应, 重左到右
    echo $color; //结果 '颜色'
    echo $a; //结果 '字母A'
    list($color, , $b) = $arr; //这样空一个
    echo $color; //结果 '颜色'
    echo $a; //结果 一样都没有, 因为就没给a赋值哦, 哪里也空出来咯
    echo $b; //结果 '字母B'
    //list each 一起用
   $arr = array(        '颜色',
        '字母A',
        '字母B'
    );
    while (list($key, $val) = each($arr)) {
        echo '下标:' . $key;
        echo '----值:' . $val;
        echo '<br>';
    }
    //输出结果为
    //下标:0----值:颜色
    //下标:1----值:字母A
    //下标:2----值:字母B
?>

krsort($arr, [$type]) bool

对数组$arr按照其下标进行倒序排列

还有一个ksort(); 这个是按下标进行升序排列

$type 是排序方式

<?php
    $arr = array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    );
    krsort($arr);
    print_r($arr); //打印结果: array('c' => 3, 'b' => 2, 'a' => 1);
?>

range($go, $end, [$setup) array

这个有点不好解释

<?php
    $arr = range(1, 10);
    print_r($arr); //结果array(1, 2, 3, 4, .., 10);
    $arr = range(1, 10, 2); //这里指定第三个参数, 也就是步长
    print_r($arr); //结果array(1, 3, 5, 7, 9);
    $arr = range('a', 'z');
    print_r($arr); //结果 array('a', 'b', 'c', ..., 'z');
?>

sort($arr);

将数组重a-z进行排序

<?php
    $arr = array(
        "lemon",
        "orange",
        "banana",
        "apple"
    );
    sort($arr);
    print_r($arr); //结果array('apple', 'banana', 'lemon', 'orange');
    //还有个z-a进行排序的函数rsort
?>

shuffle($arr) bool

将数组$arr进行乱排序, 也就是随机排序

<?php

    $arr = range(1, 10);

    shuffle($arr);

    print_r($arr); //结果是什么我也不知道, 因为是随机的

?>

usort($arr, $func) bool

使用你自己定义的函数对$arr进行排序$func是自定义函数

<?php
    $arr = array(
        1,
        5,
        8,
        2,
        0,
        3
    );
    usort($arr, 'test');
    function test($a, $b) {
        return $a == $b ? 0 : $a < $b ? 1 : -1;
    }
    print_r($arr); //打印结果 Array ( [0] => 8 [1] => 5 [2] => 3 [3] => 2 [4] => 1 [5] => 0 )
    // 这函数没弄懂哦。。 不知道参数$a , $b 代表的是什么? 看手册也没看懂, 如果这么简单的排序用ksort就行咯rsort
    // 这样的函数还有两个 uksort,和uasort都没弄懂, 郁闷。。。
?>


本文地址:http://www.phprm.com/function/aa1292a94b06d9d5203e19a5f88198cb.html

转载随意,但请附上文章地址:-)

标签:none

发表留言