数组

    来源 https://www.php.net/manual/zh/language.types.array.php

    Array 数组 PHP 中的 array 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。 由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的。

    解释这些数据结构超出了本手册的范围,但对每种结构至少会提供一个例子。 要得到这些数据结构的更多信息,建议参考有关此广阔主题的其它文献。

    语法 定义数组 array() 可以用 array() 语言结构来新建一个 array。它接受任意数量用逗号分隔的键(key) => 值(value)对。

    1array(
    2    key  => value,
    3    key2 => value2,
    4    key3 => value3,
    5    ...
    6)

    最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。

    注意:

    可以用短数组语法 [] 替代 array() 。

    示例 #1 一个简单数组

    1<?php
    2$array = array(
    3    "foo" => "bar",
    4    "bar" => "foo",
    5);
    6?>
    1<?php
    2// 使用短数组语法
    3$array = [
    4    "foo" => "bar",
    5    "bar" => "foo",
    6];
    7?>

    key 可以是 integer 或者 stringvalue 可以是任意类型。

    此外 key 会有如下的强制转换:

    String 中包含有效的十进制 int,除非数字前面有一个 + 号,否则将被转换为 int 类型。例如键名 "8" 实际会被储存为 8。另外, "08" 不会被强制转换,因为它不是一个有效的十进制整数。 Float 也会被转换为 int,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。 Bool 也会被转换成 int。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。 Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。 Arrayobject 不能 被用为键名。坚持这么做会导致警告:Illegal offset type。 如果在数组定义时多个元素都使用相同键名,那么只有最后一个会被使用,其它的元素都会被覆盖。

    示例 #2 类型转换与覆盖的示例

    1<?php
    2$array = array(
    3    1    => "a",
    4    "1"  => "b",
    5    1.5  => "c",
    6    true => "d",
    7);
    8var_dump($array);
    9?>
    1<?php
    2$array = array(
    3    1    => 'a',
    4    '1'  => 'b', // 值 "a" 会被 "b" 覆盖
    5    1.5  => 'c', // 值 "b" 会被 "c" 覆盖
    6    -1 => 'd',
    7    '01'  => 'e', // 由于这不是整数字符串,因此不会覆盖键名 1
    8    '1.5' => 'f', // 由于这不是整数字符串,因此不会覆盖键名 1
    9    true => 'g', // 值 "c" 会被 "g" 覆盖
    10    false => 'h',
    11    '' => 'i',
    12    null => 'j', // 值 "i" 会被 "j" 覆盖
    13    'k', // 值 “k” 的键名被分配为 2。这是因为之前最大的整数键是 1
    14    2 => 'l', // 值 "k" 会被 "l" 覆盖
    15);
    16
    17var_dump($array);
    18?>
    Copyright @ 2024 ~ 2025 czfadmin