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

Posted talk is cheap, show me the cod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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 的顺序也都一致时,这两个关联数组才严格相等。

 

以上是关于关于PHP数组你应该知道的事情的主要内容,如果未能解决你的问题,请参考以下文章

php 求两个数组的差集应该注意的事情

代码片段 PHP,预期文件结尾,我错在哪里?

态路小课堂丨关于铠装光纤跳线你应该知道的事情?

如何将按钮功能添加到片段中

超实用的php代码片段

Ubuntu 中的 root 用户:你应该知道的重要事情