PHP实用系统函数之数组篇
PHP中十分实用的系统函数
array
array_merge
说明:array array_merge ( array
$array1
[, array$...
] )将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结 果的数组。
注:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引
参数:
array1 : 要合并的第一个数组
. . . : 要合并的数组列表
返回值:返回结果数组
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
说明:array array_unique ( array
$array
[, int$sort_flags
= SORT_STRING ] )注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的
array
中同一个值的第一个出现的键名会被保留。注:Note: 当且仅当 (string) elem2 时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。
参数:
array : 输入的数组
sort_flags :第二个可选参数sort_flags 可用于修改排序行为
排序类型标记:
SORT_REGULAR - 按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字形式比较
SORT_STRING - 按照字符串形式比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
返回值:返回过滤后的数组
注释:Note: 注意, array_unique() 不能应用于多维数组。
对于二维数组去重值的两种方法
<?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
说明:bool array_multisort ( array
&$array1
[, mixed$array1_sort_order
= SORT_ASC [, mixed$array1_sort_flags
= SORT_REGULAR[, mixed$...
]]] )array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
参数:
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 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
返回值:成功返回TRUE,失败返回FALSE
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
说明:array array_column ( array
$input
, mixed$column_key
[, mixed$index_key
= null ] )返回
input
数组中键值为column_key
的列, 如果指定了可选参数index_key
,那么input
数组中的这一列的值将作为返回数组中对应值的键。参数:
input:需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get() 和 __isset() 魔术方法。(见Example #3)
column_key:需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是NULL,此时将返回整个数组(配合
index_key
参数来重置数组键的时候,非常管用)index_key:作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
返回值:从多维数组中返回单列数组。
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');#2
username 列是从对象获取 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_countable
是 NULL 则结果是 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()
array_shift()
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
的值为 TRUE 则 in_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()
prev()
current()
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
数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。如果内部指针越过了数组的末端,则 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实用系统函数之数组篇的更多相关文章
- PHP常用函数之数组篇
分类:数组分为索引数组和关联数组.索引数组既是指的我们的数组下表为阿拉伯数字,关联数组则是非阿拉伯数字. 定义: 5.4版本之前 $arr = array('name' => '张三', 'ag ...
- 2014年1月9日 Oracle 实用系统函数
1.空值处理 1.1 NVL(column/value,VALUE2) 与SQLSERVER的ISNULL相同 1.2 NVL2(column/value,Value2,Value3) 若参数1为空则 ...
- 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能
PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- C语言的函数指针数组(好绕啊~看完这篇估计就通关了)
转自https://www.cnblogs.com/chr-wonder/p/5168858.html int *(*p(int))[3] 今天有人问这个是啥?我一看直接就懵逼了…… 下面做一些简单的 ...
- 9 个必须知道的实用 PHP 函数和功能 [转]
9 个必须知道的实用 PHP 函数和功能 [转] 即使使用 PHP 多年,也会偶然发现一些未曾了解的函数和功能.其中有些是非常有用的,但没有得到充分利用.并不是所有人都会从头到尾一页一页地阅读手册和函 ...
- Linux网络编程2——系统函数
socket信息数据结构 #include <netinet/in.h> struct sockaddr { unsigned short sa_family; /*地址族*/ ]; /* ...
- .Net程序员学用Oracle系列(9):系统函数(上)
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.字符函数 1.1.字符函数简介 1.2.语法说明及案例 2.数字函数 2.1.数字函数简介 2.2.语法说明及案例 3.日期 ...
- .Net程序员学用Oracle系列(10):系统函数(下)
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.转换函数 1.1.TO_CHAR 1.2.TO_NUMBER 1.3.TO_DATE 1.4.CAST 2.近似值函数 2. ...
随机推荐
- 解决pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8C\\xB8' for column 'headline' at row 1")
解决pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8C\\xB8' for column ...
- 架构师养成记--29.redis开篇
主要有从下几点讲解 NOSQL(Redis) 简介.redis安装与部署 Redis基础事件类型详解 Redis高级命令 Redis与java的使用 Redis集群搭建 Redis集群与spring的 ...
- js 封装trim()方法,去掉空格
<script> //定义一个对象 - 名字是$ var $$ = function() {}; //原型 $$.prototype = { $id:function(id) { retu ...
- Python基础部分的疑惑解析——运算符和数据类型(3)
补充上一篇: #! /user/bin/env python 代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...
- #PHP# 华为云 API 方式发送短信
使用给华为云 消息 服务 API 方式发送短信 代码来自华为云,已通过测试 <?php /** * 华为云发送短信示例代码 * 本段代码需要使用自己的配置信息才能正常运行,出配置信息外,不需要改 ...
- OpenERP 中国财务模块 调整
最开始的模样是这个样子的 后三行是没用的,于是在RML文件中注释掉相关的代码,改进后的界面如下: 这个样子看起来是好多了,但是 数量跟是十亿千百的那块看起来还是很别扭,调整行高后的结果: 最诡异的事情 ...
- 使用NHibernate(4)--拦截器和事件
如果想在一个事务的开始.执行中.完成后等过程中执行一些自己的逻辑(比如记录日志.查看sql),拦截器(Interceptors)和事件(Event)就可以发挥作用了.两者所能完成的功能差不多. 1,拦 ...
- Elastic-Job源码分析之JobScheduler类分析
JobScheduler这个类是EJ中比较核心的一个类,我们现在开始解析这个类. 一.构造器 首先我们看一下JobScheduler的几个构造器. private JobScheduler(final ...
- Linux系统快速查找文件
有时候下载新的文件或安装新的包 但是却搞不清默认放在哪个目录了,这个时候可以使用locate命令进行快速模糊查找 比如我使用 go get github.com/coreos/bbolt/... 在一 ...
- PTA (Advanced Level) 1023 Have Fun with Numbers
Have Fun with Numbers Notice that the number 123456789 is a 9-digit number consisting exactly the nu ...