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');#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_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. ...
 
随机推荐
- SparkSQL中的自定义函数UDF
			
在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...
 - Spring+SpringMVC+Mybatis整合redis
			
SSM整合redis redis是一种非关系型数据库,与mongoDB不同的是redis是内存数据库,所以访问速度很快.常用作缓存和发布-订阅式的消息队列. 这里用的是ssm框架+maven构建的项目 ...
 - mariadb(mysql)的安装
			
1 使用官方源安装mariadb vim /etc/yum.repos.d/MariaDB.repo 添加repo仓库配置内容 [mariadb] name=MariaDB baseurl=http: ...
 - [Alpha]团队任务拆解
			
要求 团队任务拆解 Alpha阶段总体规划 初步实现测试.报告: 实现对游戏最基本的测试,包括内置随机测试.提供可供选择的组合测试 实现对游戏测试时操作的记录并最终生成报告 能够在发现异常时及时将异常 ...
 - [BZOJ5248][2018九省联考]一双木棋
			
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=5248 Solution 我们首先考虑放棋子的操作 发现它一定放棋子的部分是一个联通块 ...
 - 手机端全局样式表整理(mobile)
			
@charset "utf-8";/* * filename: global.css * description: 全局样式(包含样式重置,公共常用 ...
 - 【文档】五、Mysql Binlog事件结构
			
这个部分描述了事件被写入binlog或者delay log中的属性.所有的事件有相同的整体结构,也就是包含事件头和事件数据: +===================+ | event header ...
 - hibernate_SessionFactory_getCurrentSession_JTA简介
			
JTA:java transaction api java里所规定的一种管理事务的API 在另一篇播客我写到了,SessionFactory需要关注两个方法, 即: openSession ...
 - 第2章—装配Bean—通过XML装配Bean
			
通过XML装配Bean  尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...
 - Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
			
十月 17, 2016 10:14:30 下午 org.springframework.context.support.AbstractApplicationContext prepareRefres ...