zoukankan      html  css  js  c++  java
  • 关于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 的顺序也都一致时,这两个关联数组才严格相等。

  • 相关阅读:
    CoreData和SQLite多线程访问时的线程安全问题
    JSPatch 实现原理详解
    iOS开发工程师必备技能(持续更新)
    iOS音频播放、录音、视频播放、拍照、视频录制
    使用MVVM减少控制器代码实战(减少56%)
    如何结合场景利用block进行回调
    Masonry框架源码深度解析
    Ubantu编译安装FFmpeg
    HTTP Live Streaming网络视频直播调研
    RHEL/CentOS 6的更新源
  • 原文地址:https://www.cnblogs.com/smallrookie/p/6507489.html
Copyright © 2011-2022 走看看