PHP

PHP 知识量:7 - 20 - 67

5.3 数组的操作><

排序- 5.3.1 -

php常用的数组排序函数有sort()、rsort()、asort()、arsort()、ksort()、krsort()、shuffle()等,具体功能如下:

  • sort()基于数组值的比较,是从小到大正序排列,排序完成后键的序列会重新被整理,适合用于索引数组的排序。

  • rsort()与sort()功能类似,但它是倒序排列。

  • asort()基于数组值的比较,是从小到大正序排列,排序后保留键和值的对应关系。

  • arsort()与asort()功能类似,但它是倒序排列。

  • ksort()基于数组键的比较,是从小到大正序排列,适用于关联数组的排序。

  • krsort()与ksort()功能类似,但它是倒序排列。

  • shuffle()将数组打乱并随机排序,重新分配键值。

1、sort()与rsort()的示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayOne = array('1_1', '1_2', '1_3');
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用sort()**********/
        echo "应用sort后:<br>";
        sort($arrayOne);
        sort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用rsort()**********/
        echo "应用rsort后:<br>";
        rsort($arrayOne);
        rsort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        ?>
    </body>
</html>

运行结果:

array1.JPG

代码运行后,数组的键值被重写,因此sort()和rsort()不适用于关联数组。

2、asort()与arsort()的示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayOne = array('1_1', '1_2', '1_3');
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用asort()**********/
        echo "应用asort后:<br>";
        asort($arrayOne);
        asort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用arsort()**********/
        echo "应用arsort后:<br>";
        arsort($arrayOne);
        arsort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        ?>
    </body>
</html>

运行结果:

array2.JPG

3、ksort()与krsort()的示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayOne = array('1_1', '1_2', '1_3');
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用ksort()**********/
        echo "应用ksort后:<br>";
        ksort($arrayOne);
        ksort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        /**********应用krsort()**********/
        echo "应用krsort后:<br>";
        krsort($arrayOne);
        krsort($arrayTwo);
        foreach ($arrayOne as $key => $value) {
            echo "$key : $value<br>";
        }
        foreach ($arrayTwo as $key => $value) {
            echo "$key : $value<br>";
        }
        ?>
    </body>
</html>

运行结果:

array3.JPG

数组按照键值大小进行了排序。

4、shuffle()的示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        var_dump($number);
        echo "<br>应用shuffle()后:<br>";
        shuffle($number);
        var_dump($number);
        ?>
    </body>
</html>

以上代码中,调用shuffle()后,数组$number的元素会被重新随机排序,每次调用,排序后的数组元素顺序都可能不同。

计算- 5.3.2 -

php数组有许多可用的计算函数,常用的有以下几个。

1、array_sum(),可以对数组中所有元素数值相加,然后返回总和。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        $result = array_sum($number);
        echo "$result";
        ?>
    </body>
</html>

以上代码中,定义了一个索引数组,其中包含5个数字。调用array_sum()函数进行加总计算,然后输出,结果为“165”。

2、array_product(),可以对数组中所有元素数值相乘,然后返回乘积。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        $result = array_product($number);
        echo "$result";
        ?>
    </body>
</html>

以上代码中,调用array_product()函数的计算结果为“19326120”。

3、count(),其作用是统计数组中元素的个数并返回结果。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        $result = count($number);
        echo "$result";
        ?>
    </body>
</html>

以上代码中,同样定义了数组$number,调用count()函数后,输出的结果为数组$number的元素个数“5”。

查找- 5.3.3 -

php数组常用的查找类函数有以下几个。

1、in_array(),用于检查数组中是否存在某个值。它有三个参数,分别是:

  • 要查找的值

  • 待查找的数组

  • 是否同时判断类型一致性,设为TRUE时则为判断,默认不判断,此为可选项。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        $set = 22;
        $result = in_array($set, $number);
        echo "$result";
        ?>
    </body>
</html>

in_array()函数返回结果是一个布尔值,因此,如果为真,打印出来会是“1”,如果为假,则为空白。以上代码中,打印的结果为“1”。

2、array_search(),用于搜索并返回给定值的索引。它有三个参数,分别是:

  • 要查找的值

  • 待查找的数组

  • 是否同时判断类型一致性,设为TRUE时则为判断,默认不判断,此为可选项。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $number = array(11, 22, 33, 44, 55);
        $set = 33;
        $result = array_search($set, $number);
        echo "$result";
        ?>
    </body>
</html>

array_search()中,如果可以找到给定值,则返回该值对应的索引值,否则返回FALSE。如果数组中存在多个匹配的值,则返回找到的第一个值的索引值。以上代码的结果为“2”。

3、array_key_exists(),用于检查给定的索引是否存在于数组中。它有两个参数,分别是:

  • 要查找的索引值

  • 待查找的数组

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        $set = 'two';
        $result = array_key_exists($set, $arrayTwo);
        echo "$result";
        ?>
    </body>
</html>

array_key_exists()会返回一个布尔值,如果找到给定索引值就返回TRUE,否则返回FALSE。以上代码打印出来的结果为“1”(TRUE)。

其他常用函数- 5.3.4 -

1、key(),用于从数组中取得当前值的索引值,示例如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        $result = key($arrayTwo);
        echo "$result";
        ?>
    </body>
</html>

以上代码的结果为“one”。

2、array_keys(),用于返回数组中所有的索引值,其中,如果指定了具体元素值,则只返回该值的索引值。它有三个参数:

  • 待检索的数组

  • 指定的查找值(可选)

  • 是否同时检查类型(可选),默认不写(FALSE),不检查。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayTwo = array('one' => '2_1', 'two' => '2_2', 'three' => '2_3');
        $result = array_keys($arrayTwo);
        var_dump($result);
        echo '<br>';
        $result = array_keys($arrayTwo, '2_2');
        var_dump($result);
        ?>
    </body>
</html>

以上代码的打印结果为:“array(3) { [0]=> string(3) "one" [1]=> string(3) "two" [2]=> string(5) "three" } ”和“array(1) { [0]=> string(3) "two" }”。

3、list(),用于将数组的值赋值给变量。需要特别注意,该函数只适用于索引数组,并假定索引值从0开始。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <?php
        $arrayOne = array('1_1', '1_2', '1_3');
        list($a, $b, $c) = $arrayOne;
        echo "a=$a,b=$b,c=$c";
        ?>
    </body>
</html>

以上代码的打印结果为:“a=1_1,b=1_2,c=1_3”。