说到PHP编程里的多维数组处理,得把握住几把神器:深度复制!只需掌握这招,就能真真正正做一份属于自己的复制品,就算怎么弄也不会影响到原版的数据。现在就给大家介绍几个我常用的深度复制技巧:Clone、array_map(clone,$array)、serialize()+unserialize()和json_encode()+json_decode()。希望这些实战经验能帮到你们,找到最适合自己的那一种用法!
一、速度比较:clone方法的速度之快
说实话做测试时发现,clone函数实在太神速了!用时间戳计个时,居然才8.9e-6秒。这得多强!想想看,数据一多起来,速度直接关系到程序运行快慢的。
聊聊那啥子函数json_encode()和json_decode()哪一个速度更快呀?
接下来我试试看把这两个函数绑到一起用,虽然慢了点,大约是2.1e-5秒,但总归比其他方法强点儿。这种方法能应付各种复杂的数据结构,就连serialize()都搞不定的类型它也能搞定!
$array = range(1, 1000); $array[] = ['a', 'b', 'c']; $array[] = ['x' => 1, 'y' => 2];
哦你知道不?用JSON的编码与解码功能,也就是那两个叫做`json_encode()`和`json_decode()`的函数,处理大数据的话,会占挺多内存!
$time = microtime(true); $cloneCopy = clone $array; $microtime = microtime(true) - $time; $time = microtime(true); $arrayMapCloneCopy = array_map(clone, $array); $microtime2 = microtime(true) - $time; $time = microtime(true); $serializeCloneCopy = unserialize(serialize($array)); $microtime3 = microtime(true) - $time; $time = microtime(true); $jsonCloneCopy = json_decode(json_encode($array), true); $microtime4 = microtime(true) - $time;
说起存内存,我觉得json_encode()+json_decode()真厉害!让我们用memory_get_usage()瞧一瞧,才占64K,真的超好使!尤其对内存小的和要处理大量数据的小伙伴们来说。
ser/deser这俩函数会占用多少内存?
相比之下,serialize()和unserialize()那是麻烦得很,占用内存足足涨了十倍,有11万个字节!虽然能保证数据格式和类型不变,但是吃内存吃得太多,电脑内存小的朋友们可要当心,搞不好会出问题的。
五、可靠性测试:所有方法的稳定性
这个东西真棒极了!精准程度嗷嗷叫!任何花招在它面前都是浮云,坚不可摧。全套数据齐全,操作起来稳定,让人感觉特安心!不管你怎么捣鼓那个克隆版本,原来的那份依然坚如磐石,让人觉得特靠谱!
$memory = memory_get_usage(); $cloneCopy = clone $array; $memory2 = memory_get_usage() - $memory; $memory = memory_get_usage(); $arrayMapCloneCopy = array_map(clone, $array); $memory3 = memory_get_usage() - $memory; $memory = memory_get_usage(); $serializeCloneCopy = unserialize(serialize($array)); $memory4 = memory_get_usage() - $memory; $memory = memory_get_usage(); $jsonCloneCopy = json_decode(json_encode($array), true); $memory5 = memory_get_usage() - $memory;
六、实际应用中的考虑因素
这就得看你需求了啦~如果要快点儿,就试试clone大法呗;如果怕占太多内存,json_encode()和json_decode()就挺适合的;但如果是处理复杂数据,这俩神器就能派上用场!
七、总结与反思
学习了PHP数组深度拷贝法后,我知道了各种方法的好处坏处。下次再遇到这种事,就能应对自如了。所以,如果你们也碰到了这样的问题,别慌张,选一种适合你的方法解决就是!
大伙儿好,跟咋们说说平时你们都咋copyPHP数组滴呗?还有,为啥你们就爱用这个法子?赶快去评论区分享哈你们的心得,别忘记给咱点个赞嘿嘿~
评论0