1 数组
php数组能够在单个变量中存储多个值:
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
I like Volvo, BMW and Toyota.
1.1 创建数组
在php中创建数组的方式有以下几种,由于php是一种弱类型的语言,所以不需要特别指明数组中存放的数据类型,一般php数组就相当于一个百宝箱,什么都可以放。
<?php
$arr = array(); //1
$arr2 = []; //2
$arr3 = [1, 2, '23', $arr]; //3
$arr4 = array(1, 2, '23', $arr3);
//以上的方式均为自动分配ID,也可以人工分配ID
$arr5 = array(); //or $arr5 = [];
$arr5[0] = 1;
$arr5[1] = $arr4;
array (size=0)
empty
array (size=0)
empty
array (size=4)
0 => int 1
1 => int 2
2 => string '23' (length=2)
3 =>
array (size=0)
empty
array (size=4)
0 => int 1
1 => int 2
2 => string '23' (length=2)
3 =>
array (size=4)
0 => int 1
1 => int 2
2 => string '23' (length=2)
3 =>
array (size=0)
empty
1.2 操作数据
1.2.1 获取数据的长度-count()
使用php内置的函数获取数组的长度:
<?php
$arr = array();
$len = count($arr);
1.2.2 遍历数组-for
数组的遍历是一个很常见的操作,在php中有以下几种方式遍历数组:
-
for循环
<?php $arr4 = array(1, 2, '23', $arr3); for ($i = 0; $i < count($arr4); $i++) { var_dump($arr4[$i]); }
-
foreach
<?php $arr4 = array(1, 2, '23', $arr3); foreach ($arr4 as $each) { var_dump($each); }
2 关联数组
关联数组是使用程序员分配给数组的指定的键的数组,类似python中的字典,Java中的map,其实就是键值对映射。创建方式有以下几种方式:
<?php
//1
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//2
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
2.1 关联数组遍历
<?php
$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43");
foreach ($age as $k => $v) {
echo "Key=" . $k . ", Value=" . $v;
echo "<br>";
}
Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43
3 常见php数组函数
-
is_array — 检测变量是否是数组,
is_array(mixed $var): bool
如果
var
是 array,则返回true
,否则返回false
。 -
explode — 使用一个字符串分割另一个字符串
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
此函数返回由字符串组成的数组,每个元素都是
string
的一个子串,它们被字符串separator
作为边界点分割出来。 -
implode — 将一个一维数组的值转化为字符串
implode(string $glue, array $pieces): string
用
glue
将一维数组的值连接为一个字符串。注意:
因为历史原因,implode() 可以接收两种参数顺序,但是为了和 explode() 内的顺序保持一致,不按文档的方式已被废弃。
-
preg_split — 通过一个正则表达式分隔字符串
preg_split( string $pattern, string $subject, int $limit = -1, int $flags = 0 ): array
返回一个使用
pattern
边界分隔subject
后得到 的子串组成的数组, 或者在失败时返回false
。<?php //使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语 $keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords);//array([0] => hypertext [1] => language [2] => programming)
-
unset — 释放给定的变量
unset(mixed $var, mixed $... = ?): void
unset() 销毁指定的变量。
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值
-
array_change_key_case — 将数组中的所有键名修改为全大写或小写
-
array_chunk — 将一个数组分割成多个
-
array_column — 返回输入数组中指定列的值
-
array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
-
array_count_values — 统计数组中所有的值
-
array_diff_assoc — 带索引检查计算数组的差集
-
array_diff_key — 使用键名比较计算数组的差集
-
array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
-
array_diff_ukey — 用回调函数对键名比较计算数组的差集
-
array_diff — 计算数组的差集
-
array_fill_keys — 使用指定的键和值填充数组
-
array_fill — 用给定的值填充数组
-
array_filter — 使用回调函数过滤数组的元素
-
array_flip — 交换数组中的键和值
-
array_intersect_assoc — 带索引检查计算数组的交集
-
array_intersect_key — 使用键名比较计算数组的交集
-
array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
-
array_intersect_ukey — 在键名上使用回调函数来比较计算数组的交集
-
array_intersect — 计算数组的交集
-
array_key_exists — 检查数组里是否有指定的键名或索引
-
array_key_first — 获取指定数组的第一个键值
-
array_key_last — 获取一个数组的最后一个键值
-
array_keys — 返回数组中部分的或所有的键名
-
array_map — 为数组的每个元素应用回调函数
-
array_merge_recursive — 递归地合并一个或多个数组
-
array_merge — 合并一个或多个数组
-
array_multisort — 对多个数组或多维数组进行排序
-
array_pad — 以指定长度将一个值填充进数组
-
array_pop — 弹出数组最后一个单元(出栈)
-
array_product — 计算数组中所有值的乘积
-
array_push — 将一个或多个单元压入数组的末尾(入栈)
-
array_rand — 从数组中随机取出一个或多个随机键
-
array_reduce — 用回调函数迭代地将数组简化为单一的值
-
array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
-
array_replace — 使用传递的数组替换第一个数组的元素
-
array_reverse — 返回单元顺序相反的数组
-
array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
-
array_shift — 将数组开头的单元移出数组
-
array_slice — 从数组中取出一段
array_slice( array $array, int $offset, int $length = null, bool $preserve_keys = false ): array
- array:
输入的数组。
- offset:
如果
offset
非负,则序列将从array
中的此偏移量开始。如果
offset
为负,则序列将从array
中距离末端这么远的地方开始。注意:
参数
offset
标识的是数组中的位置,而不是键。- length:
如果给出了
length
并且为正,则序列中将具有这么多的单元。如果 array 比
length
要短,只会保留有效的数组单元。如果给出了
length
并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从
offset
开始一直到array
的末端。- preserve_keys:
注意:
注意 array_slice() 默认会重新排序并重置数组的数字索引。你可以通过将
preserve_keys
设为true
来改变此行为。 无论本参数如何设置,都会保留字符串的键。 -
array_splice — 去掉数组中的某一部分并用其它值取代
-
array_sum — 对数组中所有值求和
-
array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
-
array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
-
array_udiff — 用回调函数比较数据来计算数组的差集
-
array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
-
array_uintersect_uassoc — 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
-
array_uintersect — 计算数组的交集,用回调函数比较数据
-
array_unique — 移除数组中重复的值
array_unique(array `$array`, int `$sort_flags` = SORT_STRING): array
array_unique() 接受
array
作为输入并返回没有重复值的新数组。注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的
array
中同一个值的第一个出现的键名会被保留。注意: 当且仅当
(string) $elem1 === (string) $elem2
时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。 -
array_unshift — 在数组开头插入一个或多个单元
-
array_values — 返回数组中所有的值
array_values(array $array): array
array_values() 返回
input
数组中所有的值并给其建立数字索引。 -
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
-
array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
<?php function myfunction($value,$key) { echo "The key $key has the value $value<br>"; } $a=array("a"=>"red","b"=>"green","c"=>"blue"); array_walk($a,"myfunction");
The key a has the value red The key b has the value green The key c has the value blue
array_walk() 不会受到
array
内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。
**注释:**您可以通过把用户自定义函数中的第一个参数指定为引用:
&$value
,来改变数组元素的值。**提示:**如需操作更深的数组(一个数组中包含另一个数组),请使用 array_walk_recursive() 函数。
在遍历数组的过程中,也可以改变原数组的值:
<?php $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$value, $key, $prefix) { $value = "$prefix: $value"; } function test_print($value, $key) { echo "$key. $value<br />\n"; } echo 'Before ...:<br>'; array_walk($fruits, 'test_print'); array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:<br>"; array_walk($fruits, 'test_print');
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple
-
array — 新建一个数组
-
arsort — 对数组进行降向排序并保持索引关系
-
asort — 对数组进行升序排序并保持索引关系
-
compact — 建立一个数组,包括变量名和它们的值
-
count — 计算数组中的单元数目,或对象中的属性个数
-
current — 返回数组中的当前值
-
each — 返回数组中当前的键/值对并将数组指针向前移动一步
-
end — 将数组的内部指针指向最后一个单元
-
extract — 从数组中将变量导入到当前的符号表
-
in_array — 检查数组中是否存在某个值
-
key_exists — 别名 array_key_exists
-
key — 从关联数组中取得键名
-
krsort — 对数组按照键名逆向排序
-
ksort — 对数组根据键名升序排序
-
list — 把数组中的值赋给一组变量
-
natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
-
natsort — 用“自然排序”算法对数组排序
-
next — 将数组中的内部指针向前移动一位
-
pos — current 的别名
-
prev — 将数组的内部指针倒回一位
-
range — 根据范围创建数组,包含指定的元素
-
reset — 将数组的内部指针指向第一个单元
-
rsort — 对数组降序排序
-
shuffle — 打乱数组
-
sizeof — count 的别名
-
sort — 对数组升序排序
-
uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
-
uksort — 使用用户自定义的比较函数对数组中的键名进行排序
-
usort — 使用用户自定义的比较函数对数组中的值进行排序
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。