PHP基础08-数组及其相关函数

数组

数组:arrary,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器的所有数据

数组定义语法

在PHP中系统提供多种定义数组的方式
array( key => value , … )

  1. 使用array关键字:最常用的$变量=array{元素1,元素2,…}//默认0开始
  2. 可以使用中括号来包裹数据(用 [] 替代 array()。):$变量=[元素1,元素2,…]
  3. 隐形定义数组:
    $变量[]=值 //如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的 键名将是该值加一。
    $变量[下标key]=值 // 键(key)可是是一个整数 integer 或字符串string

PHP数组特点

  1. 可以整数下标或者字符串下标
    如果数组下标都为整数:索引数组
    如果数组下标都为字符串:关联数组
  2. 不同下标可以混合存在,混合数组
  3. 数组元素的顺序以放入顺序为准,跟下标无关
  4. 数组下标的自增长性
  5. 特殊值下标的自动转换
    • 包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。
    • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
    • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
    • Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
    • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
  6. PHP中数组元素没有长度类型
  7. PHP中的数组是很大的数据,所有存储位置是堆区,为当前数组分配一快连续的内存。
  8. 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖

数组的相关函数

排序函数:对数组元素进行排序,都是按照ASCII,可以进行英文比较

sort {}顺序排序(下标重排)
sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 直接对数组操作,返回值为boole(true或false)
参数:

  • array:要排序的数组。
  • sort_flags: 可选的第二个参数 sort_flags 可以用以下值改变排序的行为:
    排序类型标记: 
        •    SORT_REGULAR - 正常比较单元(不改变类型) 
        •    SORT_NUMERIC - 单元被作为数字来比较 
        •    SORT_STRING - 单元被作为字符串来比较 
        •    SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。 
        •    SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。 
        •    SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。 
    
    rsort():逆序排序
    asort()顺序 //数组的索引保持和单元的关联
    arsort()逆序
    ksort()顺序排序:按照键名(下标)排序 //保留键名到数据的关联
    krsort()逆序
    shuffle()随机打乱数组元素,不保留对应关系

指针函数:

reset() 重置指针,将内部指针倒回到第一个单元并返回第一个数组单元的值
end()重置指针,数组内部指针移动到最后一个单元并返回其值。
next()指针下移,它返回的是下一个数组单元的值
prev()指针上移
current()获取当前指针对应的值
key()获取当前指针对应的下标
//注意:next和prve会移动指针,有可能导致指针移动都边界(离开数组),导致数组不能使用(通过next和prve不能回到正确的位置)只能通过end或者reset进行指针重置

其他函数

count(mixed $array_or_countable [, int $mode = COUNT_NORMAL ])
//如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。

统计出数组里的所有元素的数量,或者对象里的东西。

array_push

array_push(array &$array , mixed $value1 [, mixed $… ])
将一个或多个单元压入数组的末尾(入栈)

array_pop

弹出并返回 array 数组的最后一个单元(被弹出去的),并将数组 array 的度减一。 (出栈)
//Note: 使用此函数后会重置(reset())array 指针。

array_shift

array_shift(array &$array)
将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。
//Note: 使用此函数后会重置(reset())array 指针。

array_unshift

array_unshift(array &$array , mixed $value1 [, mixed $… ])
将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

array_reverse

array_reverse(array $array [, bool $preserve_keys = false ])数组元素反过来
preserve_keys如果设置为 TRUE 会保留数字的键(保留键值对关系)。 非数字的键则不受这个设置的影响,总是会被保留(键值对关系总会被保存)。

in_ array

in_ array(mixed $needle , array $haystack [, bool $strict = FALSE)
判断一个元素在数组中是否存在

array_keys

array_keys(array $array [, mixed $search_value = null [, bool $strict = false ]])获取一个数组的所有下标,返回一个索引数组

  • search_value
    如果指定了这个参数,只有包含这些值的键才会返回。
  • strict
    判断在搜索的时候是否该使用严格的比较(===)(区别100和“100”)

array_values

array_values(array $array)获取一个数组的所有值,返回一个索引数组

php模拟数据结构

栈:压栈,先进去后出来(FILO)

队列:排队,先进先出(FIFO)