PHP中数组赋值性能及过程

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP中数组赋值性能及过程脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

今天导出报表时,测试同事告诉我数据太大了,无法导出。我看了下大概只有1500条左右的数据,完全不大。估计是上午将数据写入数组时方式不对。修改了下果然ok了。
参考vld用法:http://www.phppan.com/2011/05...
mac下安装vld扩展:http://blog.csdn.net/njys1/ar...
(第一次记录文章,还不熟悉排版)

下面是简单的还原
1.性能底下的写法:

<?php
    $array = null;
    $array[]='1';
    $array[]='a';
    $array[]='3';
?>

使用vld查看opcode的代码:

function name:  (null)
number of ops:  8
compiled VARs:  !0 = $array
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ASSIGN                                                   !0, null
   3     1        ASSIGN_DIM                                               !0
         2        OP_DATA                                                  '1', $2
   4     3        ASSIGN_DIM                                               !0
         4        OP_DATA                                                  'a', $4
   5     5        ASSIGN_DIM                                               !0
         6        OP_DATA                                                  '3', $6
   6     7      > RETURN                                                   1

branch: #  0; line:     2-    6; sop:     0; eop:     7; out1:  -2
path #1: 0, 

显然这种方式每赋值一次需要两步操作

2.优先的写法:

<?php
    $array = null;
    $array = ['1','a','3'];
?>

对应的opcode代码:

function name:  (null)
number of ops:  6
compiled vars:  !0 = $array
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ASSIGN                                                   !0, null
   3     1        INIT_ARRAY                                       ~1      '1'
         2        ADD_ARRAY_ELEMENT                                ~1      'a'
         3        ADD_ARRAY_ELEMENT                                ~1      '3'
         4        ASSIGN                                                   !0, ~1
   4     5      > RETURN                                                   1

branch: #  0; line:     2-    4; sop:     0; eop:     5; out1:  -2
path #1: 0,

这种方式每赋值一次需要一步操作,数据量大了区别就很明显

脚本宝典总结

以上是脚本宝典为你收集整理的PHP中数组赋值性能及过程全部内容,希望文章能够帮你解决PHP中数组赋值性能及过程所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。