PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 


【数组定义】

array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。 
      array(  key =>  value
           , ...
           )
      // 键(key)是一个整数 integer 或字符串 string
      // 值(value)可以是任意类型的值
      最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。 
      自 5.4 起可以使用短数组定义语法,用 [] 替代 array()。 


【key 会有如下的强制转换】
      ◦  包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。  
      ◦  浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。  
      ◦  布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。  
      ◦  Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。  
      ◦  数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。  
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。 

      用方括号语法访问数组单元,数组单元可以通过 array[key] 语法来访问。也可以用方括号的语法新建/修改

      $arr[key] = value;
      $arr[] = value;

unset() 函数。 

      如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0。 


【实用函数】


  • 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_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 — 从数组中取出一段
  • array_splice — 把数组中的一部分去掉并用其它值取代
  • array_sum — 计算数组中所有值的和
  • array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
  • array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
  • array_udiff — 用回调函数比较数据来计算数组的差集
  • array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
  • array_uintersect_uassoc — 带索引检查计算数组的交集,用回调函数比较数据和索引
  • array_uintersect — 计算数组的交集,用回调函数比较数据
  • array_unique — 移除数组中重复的值
  • array_unshift — 在数组开头插入一个或多个单元
  • array_values — 返回数组中所有的值
  • array_walk_recursive — 对数组中的每个成员递归地应用用户函数
  • array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
  • 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 — 使用用户自定义的比较函数对数组中的值进行排序


<?php
// 定义 - 使用key
$arr1 = array(0 => "foo", "1" => "bar", "hel" => "hello");
print_r($arr1); echo "<br>";

// 定义 - 不使用key,默认的key从0开始
$arr2 = array("foo", "bar", "hello");
print_r($arr2); echo "<br>";

// 访问数组单元,使用[]
$arr3 = array("foo",
"bar",
"multi" => array(
"dimensional" => array(
"helloword",
)
)
);
var_dump($arr3[1]);
var_dump($arr3["multi"]["dimensional"][0]);
echo "<br>";

// 函数数组引用
function getArray()
{
return array(1, 2, 3);
}
$temp = getArray();
print_r($temp); echo "<br>";

// 数组单元赋值
$arr4 = array(5 => 1, 12 => 2);
$arr4[] = 56; // This is the same as $arr[13] = 56;
$arr4["x"] = 42; // This adds a new element to the array with key "x"
unset($arr4[5]); // This removes the element from the array
unset($arr4); // This deletes the whole array

// 数组重建索引
$arr5 = array(4,5,6);
unset($arr5[1]);
print_r($arr5); echo "<br>";
$arr6 = array_values($arr5);
for($ix=0; $ix<count($arr5, COUNT_NORMAL); $ix++)
{
print $arr6[$ix]."<br>";
}

?>

PHP 数组array_php