Date
Apr. 29th, 2025
 
2025年四月廿九

Post: PHP Primer 014 : 复合类型 - 数组

PHP Primer 014 : 复合类型 - 数组

Published 12:01 Jan 22, 2012.

Created by @ezra. Categorized in #Programming, and tagged as #PHP.

Source format: Markdown

Table of Content
  1. 定义数组
  2. 操作数组
    1. 更新元素
    2. 添加元素
    3. 删除元素
    4. 遍历元素
    5. 排序元素
    6. 是否包含元素
    7. 是否包含键名
    8. 元素计数
    9. 数组合并
    10. 数组拆分
    11. 数组反转
    12. 元素求和
    13. 键值对调

数组(array)是开发过程中非常常用的类型之一,这一篇主要来看看数组的一些基本操作。

定义数组

PHP 中定义数组非常简单,通过 array() 函数即可生成,数组中允许包含数组。

注意 : PHP 中数组分为索引数组和关联数组两种形式,这是针对数组的键而言的。关联数组在其他语言中也被称为字典(Dictionary)、映射(Mapping)等。

<?php
$arr1 = array(); // 空数组
$arr2 = array("A","B","123","中文"); // 自动维护索引的数组
$arr3 = array('name' => "Lucy", 'gender' => "female"); // 关联数组
?>

此外,还可以通过 array range(int low, int high [, int step]) 函数快速创建数字元素的数组,参数 lowhigh 分别表示数组元素最小和最大值,可选参数 step 表示步进值,取值应当为正整数,默认为1。在 PHP 5 之前不存在此参数。

操作数组

更新元素

对于索引数组,数组中的元素可以通过下标操作,下标从0开始。

<?php
$arr1 = array(); // 空数组
$arr2 = array("A","B","123","中文"); // 自动维护索引的数组
$tmp = $arr2[0];  // 通过下标取出指定位置的元素
$arr2[1] = 'PHP'; // 通过下标为指定位置的元素赋值

$arr3 = array('name' => "Lucy", 'gender' => "female"); // 关联数组
$name = $arr3['name'];  // 通过key取出指定元素
$arr3['gender'] = 'male'; // 通过key为指定元素赋值
?>

添加元素

<?php 
    $arr = array(); // 空数组
    $arr[] = 'A'; // 添加元素
    $arr[] = 'B';
    $arr[] = 'C';
    print_r($arr);
?>

删除元素

可以直接通过对数组的元素调用 unset() 函数进行销毁。

<?php 
    $arr = array('A', 'B', 'C');
    unset($arr[1]);
    print_r($arr);
?>

遍历元素

遍历数组中的元素有多种方式:

  • 通过循环语句遍历,会在下一节《流程控制》部分中说明。

  • 通过 void list(mixed ...)array each(array array) 遍历。

<?php 
    $arr = array('A', 'B', 'C');
    while (list($key, $value) = each($arr)) {
        echo "$key : $value"."\n";
    }
    echo "-----\n";
    $arr2 = array('first' => 'A', 'second' => 'B');
    while (list($key, $value) = each($arr2)) {
        echo "$key : $value"."\n";
    }
?>

排序元素

排序也是很常见的一种需求,PHP 中提供了一些函数用于简单排序。

  • void sort(array array[, int sort_flags])

  • void rsort(array array[, int sort_flags])

  • void asort(array array[, int sort_flags])

  • void arsort(array array[, int sort_flags])

其中,sort/asort 从低到高排序,rsort/arsort 从高到低排序。使用 sort/rsort 排序时,可能会破坏键值对应关系,如果需要避免这种情况则应当使用 asort/arsort

可选参数 sort_flags,它的可取值有:

  • SORT_REGULAR: 默认值,表示正常比较数组元素

  • SORT_NUMERIC: 表示数组元素将被作为数字来比较

  • SORT_STRING: 表示数组元素将被作为字符串来比较

此外还有一种不常用的排序方式——随机排序。可以通过函数 bool shuffle(array &$haystack) 实现。参数 haystack 表示要随机排序的数组。使用此函数后,数组的键都会被从0开始的连续整数替换。

是否包含元素

判断数组中是否包含某个元素,可以通过 bool in_array(mixed needle, array array[, bool strict]) 函数实现,参数 needle 表示要查找的值,array 表示被检索的数组,可选参数 strict 表示检索时是否检查类型。

是否包含键名

类似的,我们也可以通过 bool array_key_exists(mixed key, array search) 函数来判断数组是否包含有某一键名。

元素计数

函数 int count(mixed array[, int mode]) 用来统计数组的元素个数,其可选参数 mode 表示计数模式,取值 COUNT_RECURSIVE(或1)表示递归计数,默认为0。

数组合并

要合并多个数组,可以使用 array array_merge(array array1, array array2 [, array ...]) 函数实现,要求最少传入两个数组,也可以传入多个。返回值是合并后的数组。

数组拆分

要拆分一个数组,可以使用 array array_chunk(array input, int size [, bool preserve_keys]) 函数实现,参数 input 表示要拆分的原始数组,size 表示拆分后每个数组的元素个数,可选参数 preserve_keys 表示是否保留原始键名,默认为 false,即拆分后的每个数组都将用从0开始的连续整数索引。

数组反转

函数 array array_reverse(array input [, bool preserve_keys]) 可以将一个数组的元素顺序前后反转,可选参数 preserve_keys 表示是否保留原始键名。

元素求和

函数 mixed array_sum(array array) 可以对数组中的元素进行求和。

键值对调

函数 array array_flip(array trans) 可以将数组中的键名与值对调,使键名成为值,值成为键名。如果同一个值多次出现,那么最后一次出现所对应的键名将作为对调后的值。

Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询