关于PHP数组你应该知道的事情

(1)、PHP数组的遍历顺序

先举个栗子:

<?php

	$arr['a'] = '123';
	$arr['b'] = '456';
	$arr['c'] = '789';
	
	foreach($a as $val){
		var_dump($val);
	}

 这段代码的输出,显然会得到如下的结果:

 

那么,如果是如下的代码呢?

<?php

	$arr[2] = '123';
	$arr[1] = '456';
	$arr[0] = '789';
	
	foreach($a as $val){
		var_dump($val);
	}

 这两段代码不同之处是一个数组为关联数组,另外一个数组为索引数组,那么它们的输出结果会是一样的么,答案是一样的,第二段代码输出也会得到跟第一段代码相同的结果。

那么,这是为什么呢?

原因就在于PHP的数组实现是一个大的HashTable,增加元素的时候, 元素会插在相同Hash元素链的头部和线性列表的尾部. 也就是说, 元素在线性遍历的时候是根据插入的先后顺序来遍历的, 这个特殊的设计使得在PHP中,当使用数字索引时, 元素的先后顺序是由添加的顺序决定的,而不是索引顺序.也就是说, PHP中遍历数组的顺序, 是和元素的添加先后相关的。

详细的解释,请参考鸟哥的  深入理解PHP之数组(遍历顺序)

 (2)、什么样的两个关联数组会严格相等

我们来看如下代码:

<?php

	$a = array('1' => 'a','2' => 'b');
	$b = array('2' => 'b','1' => 'a');
	$c = array('1' => 'a','2' => 'b');
	
	$flag_a_equal_b = ($a == $b);
	$flag_a_strict_equal_b = ($a === $b);
	$flag_a_strict_equal_c = ($a === $c);
	
	var_dump($flag_a_equal_b);
	var_dump($flag_a_strict_equal_b);
	var_dump($flag_a_strict_equal_c);

 运行这段代码会得到如下的结果:

也就是说,在PHP中,只要两个关联数组的所有的 key,对应的value都是一致的,那么这两个关联数组就是相等的。但是,只有当两个关联数组的所有 key 的顺序也都一致时,这两个关联数组才严格相等。

 

posted @ 2017-03-05 23:43  talk_is_cheap  阅读(193)  评论(0编辑  收藏  举报