zoukankan      html  css  js  c++  java
  • php数组中元素的操作

    如何向PHP数组中头部和尾部添加元素

    array_push()函数将数组当成一个栈,将传入的变量压入该数组的末尾,该数组的长度将随着入栈变量数目的增加而增加,返回数组新的单元总数。

    <?php
    $arr = [1,2,3,4];
    array_push($arr,6,7);
    print_r($arr);

    输出结果为:

     另一种更简单的添加数组元素的方式,对于数字下标数组:

    <?php
    $arr = [1,2,3,4];
    $arr[] = 5;
    $arr[] = 6;
    print_r($arr);

    关联数组可以在方括号里加上key

    <?php
    $arr = [1,2,3,4];
    $arr[] = 5;
    $arr['num'] = 6;
    print_r($arr);

    array_unshift头部添加元素

    <?php
    $arr = [1,2,3,4];
    array_unshift($arr,-1,-2);
    print_r($arr);

    输出的结果为:

    如何删除PHP数组中头部,尾部,任意元素

    删除末尾元素:array_pop

    就像子弹的弹夹一样,最后压入的子弹是最先弹出的,在计算机术语里,我们称之为先进后出栈

    既然array_push是往数组的末尾添加元素,那么array_pop就是从数组的末尾删除一个元素。

    array_pop()函数获取并返回数组的最后一个元素,并将整个数组的长度减 1 ,如果数组为空(或者不是数组),那么返回的就是 null。

    <?php
    $arr = [1,2,3,4];
    $str = array_pop($arr);
    print_r($arr);
    echo $str;

    输出结果为:

    删除头部元素:array_shift

    除了先进后出外,计算机中还有一种叫先进先出栈,可以看作是一个管道,先进去的元素最先出来

    既然array_pop可以从数组最后开始弹出元素,那么应该有函数可以从数组的头开始弹出元素,我们使用array_shift

    <?php
    $arr = [1,2,3,4];
    $str = array_shift($arr);
    print_r($arr);
    echo $str;

    删除任意数组中元素

    上面我们介绍了怎么删除数组中头部和尾部的元素,删除任意数组中的元素比前两个都简单,删除任意元素可以直接使用unset就行了!

    <?php
    $arr = [1,2,3,4];
    unset($arr[2]);
    print_r($arr);

    输出结果为:

     说明:上面删除的是索引数组,索引数组可以按指定下标删除,关联数组删除元素,可以按照key来删除指定的元素!

    下面实例就是如何删除关联数组中的元素

    <?php
    $arr = [
        'id'=>1,
        'name'=>'cyy'
    ];
    unset($arr['name']);
    print_r($arr);

    输出结果为:

    unset 可以删除任意的变量或数组

    <?php
    $arr = [
        'id'=>1,
        'name'=>'cyy'
    ];
    unset($arr);
    var_dump($arr);

    如何删除PHP数组中的重复元素

    array_unique()函数,将数组元素的值作为字符串排序,然后对每个值只保留第一个键名,忽略所有后面的键名,就是删除数组中重复的元素

    <?php
    $arr = [1,2,3,4,2,7];
    print_r($arr);
    $newarr = array_unique($arr);
    print_r($newarr);

    array_unique()函数只适用于一维数组,对多维数组并不适用,不过你可以在二维数组中的值,用array_unique()即可。

    下面实例就是使用array_unique()函数实现删除二维数组的重复元素,具体代码如下:

    <?php
    $arr = [
        [1,2,3,4,2,3],
        [11,22,33,22,55]
    ];
    $tmparr = [];
    foreach($arr as $k=>$v){
        $tmparr[$k] = array_unique($v);
    }
    $arr = $tmparr;
    print_r($arr);

    输出结果为:

    php数组中foreach遍历数组的使用实例详解

    foreach遍历数组两种语法

    foreach (array_expression as $value)
    
        statement
    
    foreach (array_expression as $key => $value)
    
        statement

    注意:当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

    注意:除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在 foreach 循环中或循环后都不要依赖数组指针的值。

    自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。

    不改变原数组:

    <?php
    $arr = [1,2,3];
    $newarr = [];
    foreach($arr as $v){
        $v = $v*2;
        $newarr[] = $v;
    }
    print_r($arr);
    print_r($newarr);

    改变原数组:

    <?php
    $arr = [1,2,3];
    foreach($arr as &$v){
        $v = $v*2;
    }
    print_r($arr);
    unset($v);

     注意:数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。foreach 不支持用“@”来抑制错误信息的能力。

    下面先遍历一下,基本的二维数组:

    <?php
    $arr = [
        [1,2,3],
        [11,22,33]
    ];
    foreach($arr as &$v){
        print_r($v);
    }

    遍历结果如下:

    此外,经常会出现要求将二维数组某一列变为一维数组,此时要将value中对应的字段取出,放在一维数组中,若是用for循环操作,比较繁琐,用foreach较为简单,如下,获取当前数组的id列,和name列,分别存放在一维数组中:

    <?php
    $arr = [
        [
            'id'=>1,
            'name'=>'cyy1'
        ],
        [
            'id'=>2,
            'name'=>'cyy2'
        ]
    ];
    
    $idArr = [];
    $nameArr = [];
    foreach($arr as $k=>$v){
        $idArr[] = $v['id'];
        $nameArr[] = $v['name'];
    }
    print_r($idArr);
    print_r($nameArr);

    遍历结果为:

    PHP综合运用数组函数-实现多文件上传

    要使用PHP实现文件上传功能,我们先来编写两个php文件:index.php和upload.php。其中,index.php页面用于提交文件上传的表单请求,upload.php页面用于接收上传的文件并进行相应处理。

    首先,我们来编写一个简单的index.php文件,由于其中涉及的主要是html代码,比较简单,因此不再赘述,index.php页面的详细代码如下:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>上传文件</title>
        </head>
        <body>
            <form action="upload.php" method="post" enctype="multipart/form-data">
                文件1:<input type="file" name="upload_file[]"><br>
                文件2:<input type="file" name="upload_file[]"><br>
                <input type="submit" value="上传">
            </form>
        </body>
    </html>

    值得注意的是,由于在HTTP协议设计之初,它并不支持文件上传功能,form表单的encrypt属性的默认值为application/x-www-form-urlencoded,它只能用于提交一般的表单请求。如果提交的表单中包含需要上传的文件,我们需要将enctype的属性值改为multipart/form-data才能实现文件上传功能。此外,method的属性值必须为post。

    接着,我们继续编写upload.php文件的代码。

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $files = $_FILES['upload_file'];
    $upload_dir = 'D:/phpstudy_pro/WWW/demo/uploads/';
    
    foreach($files['error'] as $k=>$error){
        if($error == 0){
            $tmp_name = $files['tmp_name'][$k];
            $file_name = $files['name'][$k];
            move_uploaded_file($tmp_name,$upload_dir.$file_name);
            echo '[文件'.$k.']上传成功<br>';
        }else{
            echo '[文件'.$k.']上传失败<br>';
        }
    }

    结果

    备注1:在PHP的默认配置下,上传的文件大小超出一定的范围将会出错

    备注2:上述处理文件上传的PHP代码只是一个简单的入门示例,并不能直接作为正式代码使用,因为还有许多需要额外注意的安全因素没有考虑,例如:文件的类型、文件的大小以及上传文件的名称重复等。

    备注3:如果上传的文件名称中包含中文,可能引起文件名称乱码问题。此时,需要使用函数iconv()来转换文件名称的编码.

  • 相关阅读:
    Java中的CopyOnWrite
    Collection和Collections的区别
    java中值类型与引用类型的关系
    Xml的用途
    js弹框的3种方法
    文件夹重定向失败解决方案
    网络管理人员经常遇到的十个问题(转载)
    QTP之下拉列表单选框…
    Windows脚本宿主对象模型
    QTP报错“缺少对象WScript”
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12895337.html
Copyright © 2011-2022 走看看