1 数组

php数组能够在单个变量中存储多个值:

1
2
3
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
1
I like Volvo, BMW and Toyota.

1.1 创建数组

在php中创建数组的方式有以下几种,由于php是一种弱类型的语言,所以不需要特别指明数组中存放的数据类型,一般php数组就相当于一个百宝箱,什么都可以放。

1
2
3
4
5
6
7
8
9
<?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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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内置的函数获取数组的长度:

1
2
3
<?php
$arr = array();
$len = count($arr);

1.2.2 遍历数组-for

数组的遍历是一个很常见的操作,在php中有以下几种方式遍历数组:

  • for循环

    1
    2
    3
    4
    5
    <?php
    $arr4 = array(1, 2, '23', $arr3);
    for ($i = 0; $i < count($arr4); $i++) {
    var_dump($arr4[$i]);
    }
  • foreach

    1
    2
    3
    4
    5
    <?php
    $arr4 = array(1, 2, '23', $arr3);
    foreach ($arr4 as $each) {
    var_dump($each);
    }

2 关联数组

关联数组是使用程序员分配给数组的指定的键的数组,类似python中的字典,Java中的map,其实就是键值对映射。创建方式有以下几种方式:

1
2
3
4
5
6
7
<?php
//1
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//2
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

2.1 关联数组遍历

1
2
3
4
5
6
<?php
$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43");
foreach ($age as $k => $v) {
echo "Key=" . $k . ", Value=" . $v;
echo "<br>";
}
1
2
3
Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43

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
    6
    preg_split(
    string $pattern,
    string $subject,
    int $limit = -1,
    int $flags = 0
    ): array

    返回一个使用 pattern 边界分隔 subject 后得到 的子串组成的数组, 或者在失败时返回 **false**。

    1
    2
    3
    4
    <?php
    //使用逗号或空格(包含" ", \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
    6
    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 — 移除数组中重复的值

    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
    <?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");
    1
    2
    3
    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() 函数。

    在遍历数组的过程中,也可以改变原数组的值:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?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');
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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】,让我们一起成长,谢谢。
微信公众号