关于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数组你应该知道的事情的主要内容,如果未能解决你的问题,请参考以下文章