1 数组
php数组能够在单个变量中存储多个值:
1 |
|
1 | I like Volvo, BMW and Toyota. |
1.1 创建数组
在php中创建数组的方式有以下几种,由于php是一种弱类型的语言,所以不需要特别指明数组中存放的数据类型,一般php数组就相当于一个百宝箱,什么都可以放。
1 |
|
1 | array (size=0) |
1.2 操作数据
1.2.1 获取数据的长度-count()
使用php内置的函数获取数组的长度:
1 |
|
1.2.2 遍历数组-for
数组的遍历是一个很常见的操作,在php中有以下几种方式遍历数组:
for循环
1
2
3
4
5
$arr4 = array(1, 2, '23', $arr3);
for ($i = 0; $i < count($arr4); $i++) {
var_dump($arr4[$i]);
}foreach
1
2
3
4
5
$arr4 = array(1, 2, '23', $arr3);
foreach ($arr4 as $each) {
var_dump($each);
}
2 关联数组
关联数组是使用程序员分配给数组的指定的键的数组,类似python中的字典,Java中的map,其实就是键值对映射。创建方式有以下几种方式:
1 |
|
2.1 关联数组遍历
1 |
|
1 | Key=Peter, Value=35 |
3 常见php数组函数
- is_array — 检测变量是否是数组,
1 is_array(mixed $var): bool如果
var
是 array,则返回 **true
**,否则返回 **false
**。
explode — 使用一个字符串分割另一个字符串
1
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
此函数返回由字符串组成的数组,每个元素都是
string
的一个子串,它们被字符串separator
作为边界点分割出来。implode — 将一个一维数组的值转化为字符串
1
implode(string $glue, array $pieces): string
用
glue
将一维数组的值连接为一个字符串。注意:
因为历史原因,implode() 可以接收两种参数顺序,但是为了和 explode() 内的顺序保持一致,不按文档的方式已被废弃。
preg_split — 通过一个正则表达式分隔字符串
1
2
3
4
5
6preg_split(
string $pattern,
string $subject,
int $limit = -1,
int $flags = 0
): array返回一个使用
pattern
边界分隔subject
后得到 的子串组成的数组, 或者在失败时返回 **false
**。1
2
3
4
//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);//array([0] => hypertext [1] => language [2] => programming)unset — 释放给定的变量
1
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 — 从数组中取出一段
1
2
3
4
5
6array_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 — 移除数组中重复的值
1
array_unique(array `$array`, int `$sort_flags` = SORT_STRING): array
array_unique() 接受
array
作为输入并返回没有重复值的新数组。注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的
array
中同一个值的第一个出现的键名会被保留。注意: 当且仅当
(string) $elem1 === (string) $elem2
时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。array_unshift — 在数组开头插入一个或多个单元
array_values — 返回数组中所有的值
1
array_values(array $array): array
array_values() 返回
input
数组中所有的值并给其建立数字索引。array_walk_recursive — 对数组中的每个成员递归地应用用户函数
array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
1
2
3
4
5
6
7
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");1
2
3The key a has the value red
The key b has the value green
The key c has the value bluearray_walk() 不会受到
array
内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。
注释:您可以通过把用户自定义函数中的第一个参数指定为引用:
&$value
,来改变数组元素的值。提示:如需操作更深的数组(一个数组中包含另一个数组),请使用 array_walk_recursive() 函数。
在遍历数组的过程中,也可以改变原数组的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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');1
2
3
4
5
6
7
8
9
10Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: applearray — 新建一个数组
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】,让我们一起成长,谢谢。