PHP 与 数组

来自PHP百科全书
跳转至: 导航搜索

关于PHP数组

很多编程语言都会提供各种数据结构,而PHP只提供了一种数据结构那就是数组。PHP数组的内核实现基于HashTable数据结构。

可以通过数字下标如 $array[0] ,也可以通过关键词 如 $array['hello'] 来访问。


创建数组

/**
 * 通用写法
 */
$array = array(1, 2, 3, 'hello' => 1);

/**
 * PHP5.4以上版本可用,短数组写法
 */
$array = [1, 2, 3, 'hello' => 1];

/**
 * 无需声明,直接为数组赋值,PHP会自动创建一个数字索引数组
 */
$array[] = 1;

/**
 * 无需声明,直接为数组赋值,PHP会自动创建一个关联索引数组
 */
$array['hello'] = 1;

数字索引数组

以连续数字为下标的数组,相当于其他编程语言的 List 结构。

$array = [];

$array[] = 1234;
$array[] = "hello";
$array[] = true;

var_dump($array[1]);
  • 使用 [] 或 array_append 向数组尾部追加元素
  • 使用数字下标访问元素,0 表示第1个元素,N 表示第 N+1 个元素(如 $array[1] 就表示第二个元素)
  • 使用 array_pop 从数组尾部弹出元素,先进后出
  • 使用 array_shift 从数组头部弹出元素,先进先出

关联索引数组

以任意数字、字符串作为下标的数组,相当于其他编程语言的 Map 结构。

$array["hello"] = "world";
$array[12345] = true;

var_dump($array["hello"]);


数组类型转换

  • 关联索引数组,可以直接删除某个元素,unset($array[$key]) 即可
  • 数字索引数组,不可以直接删除某个元素,强行删除会自动转换为关联索引数组,unset($array[1]) ,这个数组将变成关联索引数组,数组元素将变得不连续。可以使用 array_values 重新整理,转换为数字索引数组
var_dump(array_values($array));
 这在 JSON 处理时尤为重要,关联索引数组会被转为 JS 的 {},而数字索引数组会转为 JS 的 [],如果对数字索引数组删除了某个元素,JS 中将得到 {} 类型,可以使用 array_values 解决此问题