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,

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值