美文网首页
PHP基础 —— 数组

PHP基础 —— 数组

作者: WhiteStruggle | 来源:发表于2020-06-06 07:51 被阅读0次

    数组

    PHP中不需要指定数组大小

    1. 索引数组

    索引为整数的数组

        <?php
            $student = ["小明",1526,58];
            echo $student[3];
            echo $student[2];//25
            echo $student[1];//1526
            echo $student[0];//小明
        ?>
    
    1. 关联数组

    索引值为字符串的数组,使用字符串作为索引

        <?php
            $student["index"] = 98;
            echo $student["index"];//98
        ?>
    

    使用 print_r() 函数输出数组的具体内容

        <?php
            $student = ["666",96,true,NULL];
            echo $student;//Array , 无法显示数组内容
            print_r($student);//Array ( [0] => 666 [1] => 96 [2] => 1 [3] => )
        ?>
    

    数组的声明

    使用函数 array() ,声明数组

    可以通过设置索引,给数组添加值

        <?php
            $student = array(666,"2562",852);
            $student_1 = array(
                "name" => "小明",
                "age" => 25,
                "class" => 1506,
                 1 => 9562,
            );
            print_r($student);//Array ( [0] => 666 [1] => 2562 [2] => 852 )
            print_r($student_1);//Array ( [name] => 小明 [age] => 25 [class] => 1506  [1] => 9562 )
        ?>
    

    直接声明:

    当$student[],中括号内不设置值,默认从零开始

        <?php
            $student = ["666",66598,"false"];
            print_r($student);//Array ( [0] => 666 [1] => 66598 [2] => false )
            
            $student[] = "4";
            print_r($student);//( [0] => 666 [1] => 66598 [2] => false [3] => 4 )
            $student[6] = 5;
            print_r($student);//Array ( [0] => 666 [1] => 66598 [2] => false [3] => 4 [6] => 5 )
            
            $student_1 = ["name"=>"小明","age" => 15];
            print_r($student_1);// Array ( [name] => 小明 [age] => 15 )
        ?>
    

    多维数组

    1. 通过多层嵌套array函数,设置索引

    2. 使用[ [ ] [ ] ] 嵌套

        <?php
            $student = ["name"=>"小明","age" => 15,[555,666,777]];
            $student_array = array(
                "name"=>"小明",
                "age" => 15,
                array(
                    0 => 555,
                    1 => 666,
                    2 => 777,
                )
            );
            print_r($student);//Array ( [name] => 小明 [age] => 15 [0] => Array ( [0] => 555 [1] => 666 [2] => 777 ) ) 
            print_r($student_array);// Array ( [name] => 小明 [age] => 15 [0] => Array ( [0] => 555 [1] => 666 [2] => 777 ) )
        ?>
    

    遍历数组

    count(数组) 返回数组中数据的个数,还可以获取多维数组的数据的个数

        <?php
            $student = array(
                array(1,2,3),
                array(4,5,6,array(
                    9,
                )),
            );
            $student_1 = [[1,2,3],[4,5,6,[9]]];
            echo count($student);//2
            echo count($student_1);//2
            echo count($student,1);//10 = 2 + 7 + 1,每层数组个数之和,array()也算一个
            echo count($student_1,1);//10 = 2 + 7 + 1
        ?>
    

    for循环

    存在问题,当使用字符串作为索引时,无法使用for遍历

        <?php
            $student = [["小明",25],["小强",26],["小亮",28],["小芳",20]];
            for($i = 0 ; $i < count($student); $i++)
            {
                echo "name:".$student[$i][0].";age:".$student[$i][1]."<br>";
                // name:小明;age:25
                // name:小强;age:26
                // name:小亮;age:28
                // name:小芳;age:20
            }
        ?>
    

    foreach遍历

    格式一:

    foreach( 数组名 as 变量名)
    {
        //变量名表示现在正在进行的数据
    }
    

    例子:

        <?php
            $student = [["小明",25],["小强",26],["小亮",28],["小芳",20]];
            foreach( $student as $good )
            {
                echo "name:".$good[0].";age:".$good[1]."<br>";
                // name:小明;age:25
                // name:小强;age:26
                // name:小亮;age:28
                // name:小芳;age:20
            };
            
            $student_1 = array(
                "name" => "小明",
                "age" => 25,
                "class" => 1506,
                 1 => 9562,
            );
            foreach($student_1 as $good)
            {
                echo $good;//小明2515069562
            }
        ?>
    

    格式二:

    foreach( 数组名 as $key => $value)
    {
        //$key 表示索引值
        //$value 表示索引值对应的数据
    }
    
        $student_1 = array(
                "name" => "小明",
                "age" => 25,
                "class" => 1506,
                 1 => 9562,
            );
        foreach($student_1 as $key => $value)
            {
                echo $key.":".$value."<br>";
                // name:小明
                // age:25
                // class:1506
                // 1:9562
            }
    

    多维数组foreach遍历

    使用嵌套

    通常使用递归可以遍历多层数组

        <?php
            $student = [
                'a',
                'b',
                [1,2,3],
                ['c','d'],
            ];
            foreach($student as $good)
            {
                if( (string)($good) == "Array")
                {
                    foreach($good as $array2)
                    {
                        echo '('.$array2.')';
                    }
                    echo "<br>";
                }else{
                    echo $good."<br>";
                }   
            }
        ?>
    

    预定义超全局变量

    已存在变量,存在的数据类型是数组

    超全局变量,作用域为整个脚本

    PHP 中存在的超全局变量:

    $GLOBALS
    $_SERVER
    $_GET
    $_POST
    $_FILES
    $_COOKIE
    $_SESSION
    $_REQUEST
    $_ENV
    

    传递数据给服务器

    1. get方式

    ? 变量名 = 参数值 & 变量名 = 参数值 · · · · ·

    http://localhost:2562/PHP/demo1/3.php?
    

    在链接末尾加上 ? ,然后接上需要上传的数据,传递多个数据需要用 & 分隔

    例如:

    http://localhost:2562/PHP/demo1/3.php?id=1&name=good
    

    在服务器端(请求PHP文件)可以使用 $_GET 获取上传的数据

    通过表单上传数据,然后在form表单中添加 method="get" ,来确定上传格式

    当提交表单之后,会将数据接到链接地址后面

        <form method="get">
            用户名:<input type="text" name="username">
            性别:<input type="text" name="sex">
            <input type="submit" value="提交">
        </form>
        <?php
            var_dump($_GET);array(2); //array(2) { ["username"]=> string(4) "root" ["sex"]=> string(1) "8" }
        ?>
    
    1. post方式

    在服务器端(请求PHP文件)可以使用 $_POST 获取上传的数据

        <form method="post">
            用户名:<input type="text" name="username">
            性别:<input type="text" name="sex">
            <input type="submit" value="提交">
        </form>
        <?php
            var_dump($_POST);//array(2) { ["username"]=> string(4) "root" ["sex"]=> string(1) "8" }
        ?>
    

    通过表单上传数据,然后在form表单中添加 method="post" ,来确定上传格式

    get 方式 与 post方式相比,post比较安全,get方式数据会显示在浏览器中,存在安全隐患

    使用超全局变量

    1. 使用 $_GET,来获取以 get方式 上传的数据,并以数组格式保存其中,直接链接地址后面加上数据,也可以使用HTML表单
        <?php
        // http://localhost:2562/PHP/demo1/3.php?id=5&name=good
            var_dump($_GET);//array(2) { ["id"]=> string(1) "5" ["name"]=> string(4) "good" }
            echo($_GET["id"]);//5
            echo($_GET["name"]);//good
        ?>
    
    1. 使用 $_POST,以 post方式 上传的数据,并以数组格式保存其中

    常用数组的函数

    array_count_values

    统计数组中所有的值

    array_count_values($array);
    

    返回值:array

    返回数组的键是 array 里单元的值; 返回数组的值是 array 单元的值出现的次数。

        <?php
            $array = [ 5, 25, 6, 3, 5, 6 ];
            print_r(array_count_values($array));//Array ( [5] => 2 [25] => 1 [6] => 2 [3] => 1 )
        ?>
    

    array_key_exists

    检查数组里是否有指定的键名或索引

    array_key_exists( key , $array);
    
    key 表示 要查找的键,可以为任何能作为索引的值
    $array 表示 操作的数组
    

    返回值:bool

        <?php
            $array = array(
                "name" => "Yz",
                "class"=>1506,
                "id" => 1
            );
            var_dump (array_key_exists("name",$array));//true
            var_dump (array_key_exists("age",$array));//false
        ?>
    

    array_search

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

    array_search(str,$array);
    str 要搜索的值
    $array 表示 要操作的数组
    

    返回值:若找到,返回键名,否则返回false

        <?php
            $array = [
                "name" => "Yz",
                "age" => 20,
                "class" => 1526,
            ];
            echo array_search("Yz",$array);//name
        ?>
    

    count

    计算数组中的元素的个数,或对象中的属性个数

    count( $array_or_countable , [$mode] );
    $array_or_countable 表示 数组或者 Countable 对象。
    
    $mode 表示 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数,int
    
        <?php
            $student = array(
                array(1,2,3),
                array(4,5,6,array(
                    9,
                )),
            );
            $student_1 = [[1,2,3],[4,5,6,[9]]];
            echo count($student);//2
            echo count($student_1);//2
            echo count($student,1);//10 = 2 + 7 + 1,每层数组个数之和,array()也算一个
            echo count($student_1,1);//10 = 2 + 7 + 1
        ?>
    

    返回值:

    in_array

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

    in_array( value , $array , [strict] )
    
    value 表示 要搜索的值
    $array 表示 要操作的数组,array
    strict 表示 设置为true, 判断value的类型与$array数据的类型是否相同,bool
    

    返回值:bool,找到为true,否则false

        <?php
            $array = [
                "name" => "Yz",
                "age" => 20,
                "class" => 1526,
            ];
            var_dump( in_array("20",$array));//true
            var_dump( in_array("20",$array,true));//false
        ?>
    

    list

    把数组中的值赋给一组变量

    list(var1,var2 · · · ·) = $array
    
        <?php
            $array = [25 , 15 ,35];
            // list($apple,$banana,$orange) = $array;
            // echo $apple."元";//25元
            list(,,$orange) = $array;
            echo $orange."元";//35元
        ?>
    

    sort()

    对数组排序

    asort($array,[sort_flags]);
    
    $array 表示 要操作的数组
    sort_flags 排序类型标记,如下:
            SORT_REGULAR - 正常比较单元(不改变类型)
            SORT_NUMERIC - 单元被作为数字来比较
            SORT_STRING - 单元被作为字符串来比较
            SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
            SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
            SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
    

    返回值:成功时返回 true, 或者在失败时返回 false。

        <?php
            $fruits = array("lemon", "orange", "banana", "apple");
            sort($fruits);
            foreach ($fruits as $key => $val) {
                echo "fruits[" . $key . "] = " . $val ."\t";
            }
           //fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange
        ?>
    

    asort

    对数组进行排序并保持索引关系

    asort($array,[sort_flags]);
    
    $array 表示 要操作的数组
    sort_flags 排序类型标记,如下:
            SORT_REGULAR - 正常比较单元(不改变类型)
            SORT_NUMERIC - 单元被作为数字来比较
            SORT_STRING - 单元被作为字符串来比较
            SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
            SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
            SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
    

    返回值:成功时返回 true, 或者在失败时返回 false。

        <?php
            $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
            asort($fruits);
            foreach ($fruits as $key => $val) {
                echo "$key = $val\n";
            }
            //c = apple b = banana d = lemon a = orange
        ?>
    

    array_filter

    用回调函数过滤数组中的单元

    array_filter (  $array [$callback], [$flag] )
    
    $callback 使用的回调函数,若没有提供函数,将删除$array中所有值为false的数据
    
    $flag
        决定$callback接收的参数形式:
            ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
            ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值
    

    返回值:array

        <?php
            function even($var){
                return(!($var & 1));
            }
            function odd($var){
                return($var & 1);
            }
            $array = [ 1, 3, 5, 7, 9, 12];
            print_r(array_filter($array,"even"));// Array ( [5] => 12 )
            print_r(array_filter($array,"odd"));// Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
        ?>
    

    数组函数

    PHP数组函数

    1. array_change_key_case — 将数组中的所有键名修改为全大写或小写
    2. array_chunk — 将一个数组分割成多个
    3. array_column — 返回数组中指定的一列
    4. array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
    5. array_count_values — 统计数组中所有的值
    6. array_diff_assoc — 带索引检查计算数组的差集
    7. array_diff_key — 使用键名比较计算数组的差集
    8. array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
    9. array_diff_ukey — 用回调函数对键名比较计算数组的差集
    10. array_diff — 计算数组的差集
    11. array_fill_keys — 使用指定的键和值填充数组
    12. array_fill — 用给定的值填充数组
    13. array_filter — 用回调函数过滤数组中的单元
    14. array_flip — 交换数组中的键和值
    15. array_intersect_assoc — 带索引检查计算数组的交集
    16. array_intersect_key — 使用键名比较计算数组的交集
    17. array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
    18. array_intersect_ukey — 用回调函数比较键名来计算数组的交集
    19. array_intersect — 计算数组的交集
    20. array_key_exists — 检查数组里是否有指定的键名或索引
    21. array_key_first — Gets the first key of an array
    22. array_key_last — Gets the last key of an array
    23. array_keys — 返回数组中部分的或所有的键名
    24. array_map — 为数组的每个元素应用回调函数
    25. array_merge_recursive — 递归地合并一个或多个数组
    26. array_merge — 合并一个或多个数组
    27. array_multisort — 对多个数组或多维数组进行排序
    28. array_pad — 以指定长度将一个值填充进数组
    29. array_pop — 弹出数组最后一个单元(出栈)
    30. array_product — 计算数组中所有值的乘积
    31. array_push — 将一个或多个单元压入数组的末尾(入栈)
    32. array_rand — 从数组中随机取出一个或多个单元
    33. array_reduce — 用回调函数迭代地将数组简化为单一的值
    34. array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
    35. array_replace — 使用传递的数组替换第一个数组的元素
    36. array_reverse — 返回单元顺序相反的数组
    37. array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
    38. array_shift — 将数组开头的单元移出数组
    39. array_slice — 从数组中取出一段
    40. array_splice — 去掉数组中的某一部分并用其它值取代
    41. array_sum — 对数组中所有值求和
    42. array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
    43. array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
    44. array_udiff — 用回调函数比较数据来计算数组的差集
    45. array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
    46. array_uintersect_uassoc — 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
    47. array_uintersect — 计算数组的交集,用回调函数比较数据
    48. array_unique — 移除数组中重复的值
    49. array_unshift — 在数组开头插入一个或多个单元
    50. array_values — 返回数组中所有的值
    51. array_walk_recursive — 对数组中的每个成员递归地应用用户函数
    52. array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
    53. array — 新建一个数组
    54. arsort — 对数组进行逆向排序并保持索引关系
    55. asort — 对数组进行排序并保持索引关系
    56. compact — 建立一个数组,包括变量名和它们的值
    57. count — 计算数组中的单元数目,或对象中的属性个数
    58. current — 返回数组中的当前单元
    59. each — 返回数组中当前的键/值对并将数组指针向前移动一步
    60. end — 将数组的内部指针指向最后一个单元
    61. extract — 从数组中将变量导入到当前的符号表
    62. in_array — 检查数组中是否存在某个值
    63. key_exists — 别名 array_key_exists
    64. key — 从关联数组中取得键名
    65. krsort — 对数组按照键名逆向排序
    66. ksort — 对数组按照键名排序
    67. list — 把数组中的值赋给一组变量
    68. natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
    69. natsort — 用“自然排序”算法对数组排序
    70. next — 将数组中的内部指针向前移动一位
    71. pos — current 的别名
    72. prev — 将数组的内部指针倒回一位
    73. range — 根据范围创建数组,包含指定的元素
    74. reset — 将数组的内部指针指向第一个单元
    75. rsort — 对数组逆向排序
    76. shuffle — 打乱数组
    77. sizeof — count 的别名
    78. sort — 对数组排序
    79. uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
    80. uksort — 使用用户自定义的比较函数对数组中的键名进行排序
    81. usort — 使用用户自定义的比较函数对数组中的值进行排序

    相关文章

      网友评论

          本文标题:PHP基础 —— 数组

          本文链接:https://www.haomeiwen.com/subject/hsyzzhtx.html