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) {
……
}

数组的索引

关于数组的索引,有以下几点:

  1. 当value没有对应的value的时候,默认是从0开始的
  2. 如果显式设置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里面的元素

注意:

  1. 只比较value,不比较key
  2. value两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
  3. 结果不会去重
$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)数组合并的时候,有几点需注意:

  1. 若A和B里面有相同的索引,那么B的值会覆盖A的值
  2. 合并之后,无索引的值的默认索引会被从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
)

当然还有很多其他用法,待以后添加╮( ̄▽ ̄)╭