Contents
数字索引数组
初始化
1 | $products = array('Tires', 'Oil', 'Spark Plugs'); |
访问
1 | echo $products[0] |
使用循环访问
1 | for ($i = 0; $i < 3; $i++){ |
使用不同索引的数组
初始化关联数组
1 | $prices = array('Tires'=>100, 'Oil'=>10, 'Spark Plugs'=>4); |
访问
1 | $prices = array('Tires'=>100); |
使用循环访问
1 | foreach($prices as $key => $value) { |
数组操作符
$a + $b
联合 $a 和 $b 的联合。$a == $b
相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE。$a === $b
全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。$a != $b
不等 如果 $a 不等于 $b 则为 TRUE。$a <> $b
不等 如果 $a 不等于 $b 则为 TRUE。$a !== $b
不全等 如果 $a 不全等于 $b 则为 TRUE。
多维数组
初始化
1 | $products = array(array('TIR', 'Tires', 100), |
访问
1 | for ($row = 0 ; $row < 3; $row++){ |
初始化
1 | $products = array(array('Code'=>'TIR', |
访问
1 | for($row=0; $row<3;$row++){ |
排序
sort
1
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
按字母, 数字升序排序
可选的第二个参数 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 位运算),不区分大小写排序字符串。
asort按每个元素值进行排序 ksort按键进行排序
反向排序 rsort arsort krsort
多维数组排序
按第二列(说明)字母进行排序
1 | function compare($x,$y){ |
按第三列(价格)字母进行排序
1 | function compare($x,$y){ |
usort()中的”u”代表”user”,因为这个函数要求传入用户自定义函数。asort、ksort有对应的uasort和uksort
反向排序
1 | function reverse_compare($x,$y){ |
bool shuffle ( array &$array )随机顺序
数组逆序
1 | array array_reverse ( array $array [, bool $preserve_keys = false ] ) |
array_push 将一个或多个单元压入数组的末尾
1 | int array_push ( array &$array , mixed $var [, mixed $... ] ) |
array_pop 将数组最后一个单元弹出
1 | mixed array_pop ( array &$array ) |
按定界符分割字符串
1 | array explode ( string $delimiter , string $string [, int $limit ] ) |
- delimiter:边界上的分隔字符
- string:输入的字符串
- limit:
- 如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
- 如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。
- 如果 limit 是 0,则会被当做 1。
在数组中浏览:each(),current(),reset(),end(),next(),pos()和prev()
- each()间接的使用了数组的指针,其他的函数都是直接使用操作这个指针。
- 如果创建一个新数组,那么当前指针就被初始化,并指向第一个元素,调用current($array_name)将返回第一个元素。
- 调用each()和next()都会使指针前移。调用each($array_name)会在指针前移一个位置之前返回当前元素。next()函数则不用,它会将指针前移,然后再返回新的当前元素。
- reset()函数将返回指向数组的第一个元素的指针(有时指针会移到数组中的某一个位置,我们想重置这个数组,就会使用这个函数)。调用end($array_name)可以将指针移到数据的末尾。reset()和end()将返回数组的第一个元素和最后一个元素。
- prev()函数正好和next()相反。
对数组的每一个元素应用任何函数:array_walk()
有时,会以相同的方式使用或者修改数组的每一个元素。那么array_walk就提供这样的操作。
array_walk()函数的原型如下:
1 | bool array_walk(array arr,string func,[mixed userdata]); |
- 第一个参数是arr,也就是需要处理的数组。
- 第二个参数是用户自定义函数,怎么处理这个数组中的每一个元素,就需要用户写自定义操作。
- 第三个参数是可选的,如果使用它,它可以作为一个参数传递给我们的自定义函数。
1 | $numbers = range(1,10); |
我们也可以对这个数组中的每一个元素进行修改等等之类的操作。如下:
1 | $numbers = range(1,10); |
上面的代码就使用了array_walk()函数的第三个参数,乘法因子,可以不用在自定义函数的固定,可以根据业务逻辑随时更换。需要注意是我们在$value变量之前加了一个&符号,表明传的是变量的引用,于C#中的ref或out类似。
统计数组元素个数:count(),sizeof()和array_count_values()
count()和sizeof()函数都可以计算数组元素中的元素个数,如果数组为空数组或没有经过初始化的变量,都返回0;
1 | $numbers = range(1,10); |
array_count_values()函数,返回数组中每一个元素,出现的频率数的一个相关数组。如下:
1 | $numbers = array(5,1,8,5,3,0,4,3,5); |
输出如下:
1 | 5--3 |
将数组转换成标量变量:extract()
extract()函数的作用是将一个数组转换成一系列的标量变量,这些变量的名称必须是数组中的Key,而变量值则是数组中的值。如下:
1 | $phones = array('name' => 'xiaomi','price'=>1999,'os' => 'android'); |