PHP中十分实用的系统函数

  • array

    • array_merge

      1. 说明:array  array_merge ( array $array1 [, array $... ] )

        将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结 果的数组。

        注:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

        如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

      2. 参数:

        • array1 : 要合并的第一个数组

        • . . . : 要合并的数组列表

      3. 返回值:返回结果数组

    • Example

      <?php
      $array1 = array("color" => "red", 2, 4);
      $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
      $result = array_merge($array1, $array2);
      print_r($result);
      ?>
      /*
      Array (
      [color] => green
      [0] => 2
      [1] => 4
      [2] => a
      [3] => b
      [shape] => trapezoid
      [4] => 4
      )
      */
  • 相关算法应用

    <?php
    /**
    * [quickSort 快速排序法]
    * @param [array] $arr [需要排序数组]
    * @return [array]     [返回参数或处理后的满足条件数组]
    */
    function quickSort($arr){
    if(!is_array($arr) || count($arr) <=1){
    return $arr;
    }
    $key = $arr[0];
    $left_arr = array();
    $right_arr = array();
    for($i = 1;$i < count($arr);$i++){
    if($key > $arr[$i]){
    $left_arr[] = $arr[$i];
    }else{
    $right_arr[] = $arr[$i];
    }
    }
    $left_arr = quickSort($left_arr);
    $right_arr = quickSort($right_arr);
    return array_merge($left_arr,array($key),$right_arr);
    }
  • array_unique

    1. 说明:array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

      注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。

      注:Note: 当且仅当 (string) ​elem2 时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。

    2. 参数:

      • array : 输入的数组

      • sort_flags :第二个可选参数sort_flags 可用于修改排序行为

        • 排序类型标记:

          • SORT_REGULAR - 按照通常方法比较(不修改类型)

          • SORT_NUMERIC - 按照数字形式比较

          • SORT_STRING - 按照字符串形式比较

          • SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。

    3. 返回值:返回过滤后的数组

    4. 注释:Note: 注意, array_unique() 不能应用于多维数组。

    5. 对于二维数组去重值的两种方法

      <?php
      /**
      * [array_unique_fn 二维数组去重值(保留数组键名)]
      * @param [array] $arr [description]
      * @return [array] $tmp1   [description]
      */
      function array_unique_fn($arr){
      foreach($arr as $val){
      $val = join(',',$val);
      $tmp[] = $val;
      }
      $tmp = array_unique($tmp);
      foreach ($tmp as $k => $v){
      $array = explode(',',$v);
          // 根据需要自定义过滤数组键名
      $tmp1[$k]['id'] = $array[0];
      $tmp1[$k]['title'] = $array[1];
      $tmp1[$k]['imgurl'] = $array[2];
      }
      return $tmp1;
      }
      /**
      * [array_unique_fn 二维数组去重值]
      * @param [array] $arr [description]
      * @return [array] $temp   [description]
      */
      function array_unique_fb($arr)
      {
       foreach ($arr as $v)
      {
         $v = join(",",$v);  
         $temp[] = $v;
      }
       $temp = array_unique($temp);  
       foreach ($temp as $k => $v)
      {
         $temp[$k] = explode(",",$v);  
      }
       return $temp;
      }
  • array_multisort

    1. 说明:bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR[, mixed $... ]]] )

      array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。

      关联(string)键名保持不变,但数字键名会被重新索引。

    2. 参数:

      • array1 : 要排序的array

      • array1_sort_order : SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。

        此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。

      • array1_sort_flags : 为array 参数设定参数选项:

        • SORT_REGULAR - 将项目按照通常方法比较(不修改类型)

        • SORT_NUMERIC - 按照数字大小比较

        • SORT_STRING - 按照字符串比较

        • SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。

        • SORT_NATURAL - 以字符串的"自然排序",类似 natsort()

        • SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。

        • 参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR

      • . . . : 可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。

    3. 返回值:成功返回TRUE,失败返回FALSE

    4. Example:

      • 多维数组按照某一列键值排序

        <?php 
        $arr = array(
        array(
        'id'=>577,
        'name'=>'lee',
        'updateTime'=>'2018-1-1'
        ),
        array(
        'id'=>200,
        'name'=>'Any',
        'updateTime'=>'2019-1-1'
        ),
        array(
        'id'=>566,
        'name'=>'Tony',
        'updateTime'=>'2017-1-1'
        )
        );

        /*
        取出键名为`updateTime`的所有键值并返回新的索引数组。
        Array (
        [0] => 2018-1-1
        [1] => 2019-1-1
        [2] => 2017-1-1
        )
        */
        $tmp = array_column($arr,'updateTime'); /*
        按照正序方式,基于排序数组排序,返回值为True或False
        Array (
        [0] => Array ( [id] => 566 [name] => Tony [updateTime] => 2017-1-1 )
        [1] => Array ( [id] => 577 [name] => lee [updateTime] => 2018-1-1 )
        [2] => Array ( [id] => 200 [name] => Any [updateTime] => 2019-1-1 )
        )
        */
        array_multisort($tmp,SORT_ASC,$arr);
  • array_column

    1. 说明:array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )

      返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

    2. 参数:

      • input:需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get()__isset() 魔术方法。(见Example #3)

      • column_key:需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)

      • index_key:作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

    3. 返回值:从多维数组中返回单列数组。

    4. Example:

      • #1获取多维数组某一列值

        <?php 
        $arr = array(
        array(
        'id'=>577,
        'name'=>'lee',
        'updateTime'=>'2018-1-1'
        ),
        array(
        'id'=>200,
        'name'=>'Any',
        'updateTime'=>'2019-1-1'
        ),
        array(
        'id'=>566,
        'name'=>'Tony',
        'updateTime'=>'2017-1-1'
        )
        );

        /*
        取出键名为`updateTime`的所有键值并返回新的索引数组。
        Array (
        [0] => 2018-1-1
        [1] => 2019-1-1
        [2] => 2017-1-1
        )
        */
        $tmp = array_column($arr,'updateTime');
        /*
        取出键名为`updateTime`的所有键值并返回新的索引数组并用键名`id`的键值为新数组的键名。
        Array (
        [577] => 2018-1-1
        [200] => 2019-1-1
        [566] => 2017-1-1
        )
        */
        $tmp_new = array_column($arr,'updateTime','id');
      • #2username 列是从对象获取 public 的 "username" 属性

        <?php

        class User
        {
           public $username;

           public function __construct(string $username)
          {
               $this->username = $username;
          }
        }

        $users = [
           new User('user 1'),
           new User('user 2'),
           new User('user 3'),
        ];

        print_r(array_column($users, 'username'));
        /*
        输出结果
        Array
        (
           [0] => user 1
           [1] => user 2
           [2] => user 3
        )
        */

      • #3获取 username 列,从对象通过魔术方法 __get() 获取 private 的 "username" 属性。

        <?php

        class Person
        {
           private $name;

           public function __construct(string $name)
          {
               $this->name = $name;
          }

           public function __get($prop)
          {
               return $this->$prop;
          }

           public function __isset($prop) : bool
          {
               return isset($this->$prop);
          }
        }

        $people = [
           new Person('Fred'),
           new Person('Jane'),
           new Person('John'),
        ];

        print_r(array_column($people, 'name'));
        /*
        输出结果
        Array
        (
           [0] => Fred
           [1] => Jane
           [2] => John
        )
        * 如果不提供__isset()魔术方法,将返回空数组
        */
  • count()

    • 说明:int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )

      计算数组中的单元数目,或者对象中的个数

    • 参数:

      • array_or_countable:数组或者Countable对象

      • mode:如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。

      • 返回值:返回 array_or_countable 中的单元数目。 如果参数既不是数组,也不是实现 Countable 接口的对象,将返回 1。 有个例外:如果array_or_countableNULL 则结果是 0

      • Example

        <?php
        $food = array(
           'fruits' => array('orange', 'banana', 'apple'),
           'veggie' => array('carrot', 'collard', 'pea')
        );

        // recursive count
        echo count($food, COUNT_RECURSIVE); // output 8

        // normal count
        echo count($food); // output 2

  • array_push()

    • 说明:int array_push ( array &$array , mixed $value1 [, mixed $... ] )

      array_push()array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。

    • 参数:

      • array:输入的数组

      • value1:要压入array数组末尾的第一个值

    • 返回值:返回处理后的数组元素个数

    • 注*:如果只是使用array_push()来给数组增加一个单元,使用$array[] = ,可以省去调用函数的额外负担

    • Example

      <?php
      $stack = array("orange", "banana");
      array_push($stack, "apple", "raspberry");
      print_r($stack);
      /*
      Array
      (
         [0] => orange
         [1] => banana
         [2] => apple
         [3] => raspberry
      )
      */
      ?>
  • array_pop()

    • 说明:mixed array_pop ( array &$array )

      array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。

      Note: 使用此函数后会重置(reset()array 指针。

    • 参数:

      • array:需要做出栈的数组

    • 返回值:返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL

  • array_shift()

    • 说明:mixed array_shift ( array &$array )

      array_shift()array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。

      Note: 使用此函数后会重置(reset()array 指针。

    • 参数:

      • array:输入的数组

    • 返回值:返回移除的值,如果 array 为空或者不是一个数组则返回 NULL

  • array_unshift()

    • 说明:int array_unshift ( array &$array , mixed $value1 [, mixed $... ] )

      array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

    • 参数:

      • array:输入的数组

      • value1:开头插入的变量

    • 返回值:返回array数组新的单元数目

    • Example:

      <?php
      $queue = array("orange", "banana");
      array_unshift($queue, "apple", "raspberry");
      print_r($queue);
      ?>
      /*
      Array
      (
         [0] => apple
         [1] => raspberry
         [2] => orange
         [3] => banana
      )
      */

  • in_array()

    • 说明:bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

      检查数组中是否存在某个值,如大海捞针,在大海(haystack)中搜索针( needle),如果没有设置 strict 则使用宽松的比较。

    • 参数:

      • needle:待搜索的值。Note:如果needle是字符串,则比较是区分大小写的。

      • haystack:带搜索的数组。

      • strict:如果第三个参数 strict 的值为 TRUEin_array() 函数还会检查 needle类型是否和 haystack 中的相同。

    • 返回值:如果找到 needle 则返回 TRUE ,否则返回 FALSE

    • Example:

      • 判断值的数据类型为字符时

        <?php
        $os = array("Mac", "NT", "Irix", "Linux");
        if (in_array("Irix", $os)) {
           echo "Got Irix";
        }
        if (in_array("mac", $os)) {
           echo "Got mac";
        }
        ?>
        /*
        Got Irix
        */
      • 严格类型判断

        <?php
        $a = array('1.10', 12.4, 1.13);

        if (in_array('12.4', $a, true)) {
           echo "'12.4' found with strict check\n";
        }

        if (in_array(1.13, $a, true)) {
           echo "1.13 found with strict check\n";
        }
        ?>
        /*
        1.13 found with strict check
        */
  • 数组相关的指针函数(可编写PHP消息队列)

    • reset()

      • 说明:mixed reset ( array &$array )

        将数组的内部指针指向第一个单元

      • 参数:

        • array:输入的数组

      • 返回值:返回数组第一个单元的值,如果数组为空则返回 FALSE

    • end()

      • 说明:mixed end ( array &$array )

        将数组的内部指针指向最后一个单元

      • 参数:

        • array:这个数组。 该数组是通过引用传递的,因为它会被这个函数修改。 这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递

      • 返回值:返回最后一个元素的值,或者如果是空数组则返回 FALSE

    • next()

      • 说明:mixed next ( array &$array )

        next()current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。

      • 参数:

        • array:受影响的 array

      • 返回值:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE

      • Warning:此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。应使用 === 运算符来测试此函数的返回值。

    • prev()

      • 说明:mixed prev ( array &$array )

        将数组的内部指针倒回一位

      • 参数:

        • array:输入的数组

      • 返回值:返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回 FALSE

      • Warning:此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。应使用 === 运算符来测试此函数的返回值。

    • current()

      • 说明:mixed current ( array &$array )

        返回数组中的当前单元

      • 参数:

        • array:此数组

      • 返回值:current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE

      • Warning:此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。应使用 === 运算符来测试此函数的返回值。

    • Example:

      <?php

      $array = array('step one', 'step two', 'step three', 'step four');

      // by default, the pointer is on the first element
      echo current($array) . "<br />\n"; // "step one"

      // skip two steps
      next($array);
      echo current($array) . "<br/>\n"; // "step two"
      prev($array);
      echo current($array) . "<br />\n"; // "step one"

      // reset pointer, start again on step one
      reset($array);
      echo current($array) . "<br />\n"; // "step one"

      ?>
    • each()

      • 说明:array each ( array &$array )

        返回数组中当前的键/值对并将数组指针向前移动一步

        —— 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()

      • 参数:

        • array:输入的数组

      • 返回值:返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为01keyvalue。单元 0key 包含有数组单元的键名,1value 包含有数据。

        如果内部指针越过了数组的末端,则 each() 返回 FALSE

      • Example:

        <?php
        $foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
        $bar = each($foo);
        print_r($bar);
        ?>
        /*
        $bar 现在包含有如下的键/值对:
        Array
        (
           [1] => bob
           [value] => bob
           [0] => 0
           [key] => 0
        )
        */

PHP实用系统函数之数组篇的更多相关文章

  1. PHP常用函数之数组篇

    分类:数组分为索引数组和关联数组.索引数组既是指的我们的数组下表为阿拉伯数字,关联数组则是非阿拉伯数字. 定义: 5.4版本之前 $arr = array('name' => '张三', 'ag ...

  2. 2014年1月9日 Oracle 实用系统函数

    1.空值处理 1.1 NVL(column/value,VALUE2) 与SQLSERVER的ISNULL相同 1.2 NVL2(column/value,Value2,Value3) 若参数1为空则 ...

  3. 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能

    PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...

  4. Verilog学习笔记基本语法篇(十一)········ 常用系统函数

    1)系统任务:$monitor   格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...

  5. C语言的函数指针数组(好绕啊~看完这篇估计就通关了)

    转自https://www.cnblogs.com/chr-wonder/p/5168858.html int *(*p(int))[3] 今天有人问这个是啥?我一看直接就懵逼了…… 下面做一些简单的 ...

  6. 9 个必须知道的实用 PHP 函数和功能 [转]

    9 个必须知道的实用 PHP 函数和功能 [转] 即使使用 PHP 多年,也会偶然发现一些未曾了解的函数和功能.其中有些是非常有用的,但没有得到充分利用.并不是所有人都会从头到尾一页一页地阅读手册和函 ...

  7. Linux网络编程2——系统函数

    socket信息数据结构 #include <netinet/in.h> struct sockaddr { unsigned short sa_family; /*地址族*/ ]; /* ...

  8. .Net程序员学用Oracle系列(9):系统函数(上)

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.字符函数 1.1.字符函数简介 1.2.语法说明及案例 2.数字函数 2.1.数字函数简介 2.2.语法说明及案例 3.日期 ...

  9. .Net程序员学用Oracle系列(10):系统函数(下)

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.转换函数 1.1.TO_CHAR 1.2.TO_NUMBER 1.3.TO_DATE 1.4.CAST 2.近似值函数 2. ...

随机推荐

  1. panda的query过滤

    pandas中可以用query函数以类SQL语言执行查询.

  2. Maven自动FTP远程部署

    参照官网文档: https://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ftp.html 1.在pom.xml中加入: ...

  3. 基于python的几种排序算法的实现

    #!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/3/28 10:26 # @Author : Yosef-夜雨声烦 # @Email ...

  4. 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)

    学习过程中难免遇到问题,今天就遇到了Navicat 2003-can't connect to MYSQL server on 'localhost'(10061),navicat报错,我就纳闷以前都 ...

  5. Secondary NameNode究竟是做什么的

    Secondary NameNode:它究竟有什么作用? 在hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备 ...

  6. h5 html5 模拟时钟 页面

    <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content=& ...

  7. dp--2019南昌网络赛B-Match Stick Game

    dp--2019南昌网络赛B-Match Stick Game Xiao Ming recently indulges in match stick game and he thinks he is ...

  8. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  9. 关于Java 下 Snappy压缩存文件

    坑点: 压缩后的byte 数组中会有元素是负数,如果转化成String 存入文件,然后再读取解压缩还原,无法得到原来的结果,甚至是无法解压缩. 原因分析: String 底层是由char 数组构成的, ...

  10. linux mint 19安装 kvm 软件包

    1 我的处理器是2700x 首先安装cpu检测 sudo apt-get install cpu-checker 2 查看cpu内核 egrep -c '(vmx|svm)' /proc/cpuinf ...