php数组相关知识点
数组的创建
$arr = array();
或者
$arr = [];
数组赋值
$arr = array();
$arr[0] = 'zero';
$arr[1] = 'one';
$arr[2] = 'two';
打印出来是这样的var_dump($arr);
array(3) {
[0]=>
string(4) "zero"
[1]=>
string(3) "one"
[2]=>
string(3) "two"
}
数组追加元素
$arr = array('zero', 'one', 'two', 'three');
$arr[] = 'four';
打印出来是这样的var_dump($arr);
array(5) {
[0]=>
string(4) "zero"
[1]=>
string(3) "one"
[2]=>
string(3) "two"
[3]=>
string(5) "three"
[4]=>
string(4) "four"
}
获取数组长度count()
$arr = array('zero', 'one', 'two', 'three');
echo count($arr);
遍历数组
$arr = array('zero', 'one', 'two', 'three');
foreach ($arr as $item) {
……
}
数组里面还能存储不同类型的值
$arr = array('zero', 100, 'two', 'three');
var_dump($arr);
打印出来是
array(4) {
[0]=>
string(4) "zero"
[1]=>
int(100)
[2]=>
string(3) "two"
[3]=>
string(5) "three"
}
以上都是我们熟悉的数组,但是php里面还有关联数组
,即可以是key-value的形式,有点类似OC里面的NSDictionary
关联数组的key可以是integer或者string,value可以使任何类型的值
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
遍历关联数组
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach ($age as $key=>$value) {
……
}
数组的索引
关于数组的索引,有以下几点:
- 当value没有对应的value的时候,默认是从0开始的
- 如果显式设置key为某个非负整数,那么之后的索引从此处开始递增
$arr = [
'test' => 'v1',
'v2',
'v3',
8 => 'v4',
'age' => 'v5',
'v6',
];
print_r($arr);
结果是
Array
(
[test] => v1
[0] => v2
[1] => v3
[8] => v4
[age] => v5
[9] => v6
)
可以看到,当显式设置了索引8之后,没有索引的值的索引从8以后开始递增。
如果在之后,显式设置了之前已经被用过的索引,那么先前的value会被覆盖。
$arr = [
'test' => 'v1',
'v2',
'v3',
8 => 'v4',
'age' => 'v5',
'v6',
0 => 'v7',
'age' => 'v9',
];
print_r($arr);
结果是
Array
(
[test] => v1
[0] => v7
[1] => v3
[8] => v4
[age] => v9
[9] => v6
)
下面来说说数组里面常用的几个函数
array_keys
获取数组所有的key
$arr = array(
'k1' => 1,
'k2' => 2,
'k3' => 3,
);
var_dump(array_keys($arr));
结果是
array(3) {
[0]=>
string(2) "k1"
[1]=>
string(2) "k2"
[2]=>
string(2) "k3"
}
array_values
获取数组所有的value
$arr = array(
'k1' => 1,
'k2' => 2,
'k3' => 1,
);
var_dump(array_values($arr));
结果是
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(1)
}
array_reverse
返回单元顺序相反的数组
$arr = array(
'k1' => 1,
'k2' => 2,
'k3' => 1,
);
var_dump(array_reverse($arr));
结果是
array(3) {
["k3"]=>
int(1)
["k2"]=>
int(2)
["k1"]=>
int(1)
}
array_column
获取数组某一列
array_column($paramArray, $paramKey)
的第一个参数是数组,第二个参数是列名
如果数组里面是这种形式,类似于一个表格,取其中的一列k1
$arr = array(
array(
'k1' => 1,
'k2' => 2,
'k3' => 3,
),
array(
'k1' => 5,
'k2' => 6,
'k3' => 7,
),
);
var_dump(array_column($arr, 'k1'));
结果是:
array(2) {
[0]=>
int(1)
[1]=>
int(5)
}
如果某一行里面并没有该列,会怎样?
$arr = array(
array(
'k2' => 2,
'k3' => 3,
),
array(
'k1' => 5,
'k2' => 6,
'k3' => 7,
),
);
var_dump(array_column($arr, 'k1'));
结果是
array(1) {
[0]=>
int(5)
}
array_flip
翻转数组的key和value。
注意,如果翻转之后,key不是integer或者string,那么则不能翻转
$arr = array(
'k1' => 1,
'k2' => 2,
'k3' => 3,
);
var_dump(array_flip($arr));
结果是
array(3) {
[1]=>
string(2) "k1"
[2]=>
string(2) "k2"
[3]=>
string(2) "k3"
}
如果翻转过来之后,相同的key有不同的值怎么办?————该key的值为后面一个值。
$arr = array(
'k1' => 1,
'k2' => 1,
'k3' => 1,
);
var_dump(array_flip($arr));
结果是
array(1) {
[1]=>
string(2) "k3"
}
array_shift
删除数组里面第一个元素并返回
$a=array("a"=>"red","b"=>"green","c"=>"blue");
var_dump(array_shift($a));
var_dump($a);
结果是
string(3) "red"
array(2) {
["b"]=>
string(5) "green"
["c"]=>
string(4) "blue"
}
array_diff()
比较数组的差集
array_diff(A, B)
返回的是在A但是不在B里面的元素
注意:
- 只比较value,不比较key
- value两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
- 结果不会去重
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "black");
$result = array_diff($array1, $array2);
print_r($result);
结果是
Array
(
[0] => red
[1] => blue
[2] => red
)
array_merge
数组合并
array_merge(A, B)数组合并的时候,有几点需注意:
- 若A和B里面有相同的索引,那么B的值会覆盖A的值
- 合并之后,无索引的值的默认索引会被从0开始重新排序
$array1 = [
'k1' => 'v1',
'v2',
'v3',
'K4' => 'v4',
100 => 'v5',
'v6',
];
$array2 = [
'k1' => 'v90',
'v91',
'v92',
'K93' => 'v93',
100 => 'v94',
'v95',
];
print_r($array1);
print_r($array2);
$result = array_merge($array1, $array2);
print_r($result);
结果是
Array
(
[k1] => v1
[0] => v2
[1] => v3
[K4] => v4
[100] => v5
[101] => v6
)
Array
(
[k1] => v90
[0] => v91
[1] => v92
[K93] => v93
[100] => v94
[101] => v95
)
Array
(
[k1] => v90
[0] => v2
[1] => v3
[K4] => v4
[2] => v5
[3] => v6
[4] => v91
[5] => v92
[K93] => v93
[6] => v94
[7] => v95
)
当然还有很多其他用法,待以后添加╮( ̄▽ ̄)╭