PHP中數組賦值性能及過程

今天導出報表時,測試同事告訴我數據太大了,沒法導出。我看了下大概只有1500條左右的數據,徹底不大。估計是上午將數據寫入數組時方式不對。修改了下果真ok了。
參考vld用法:http://www.phppan.com/2011/05...
mac下安裝vld擴展:http://blog.csdn.net/njys1/ar...
(第一次記錄文章,還不熟悉排版)php

下面是簡單的還原
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.優先的寫法:fetch

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

對應的opcode代碼:.net

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,

這種方式每賦值一次須要一步操做,數據量大了區別就很明顯code

相關文章
相關標籤/搜索