2009-09-09 100 views
26

哪一個應該用來操縱數據,數組或數組對象? 像搜索,排序和其他數組操作。PHP Array和ArrayObject

+0

你有沒有想要做什麼的例子? – willoller 2009-09-09 15:32:20

+0

我需要使用Array進行搜索,排序和其他複雜的操作,基本上是爲了在算法中使用它。所以我需要知道哪一個更好更快。 – Imrul 2009-09-09 17:38:25

回答

27

基本型爲array。這是一個可以寫入,讀取和循環訪問的鍵和值的映射。

ArrayObject是一個可以擴展以創建行爲就像它們是數組一樣的對象的類。它實現了像countsort這樣的方法,使您可以像處理數組一樣處理對象。它是SPL(標準PHP庫)的一部分。

通常你會使用array。你會知道你什麼時候需要ArrayObject

0

大多數情況下,數組就是所有需要的。在特定用途擴展功能時,ArrayObject最爲有用。

1

您使用array簡單(標準)陣列

ArrayObject是一類,它可以用來提升自己的類用作陣列(比如你的一些集合類)

+0

ArrayObject不是一個抽象類。 – GZipp 2009-09-09 15:49:19

+0

哦,你是對的。我的壞,編輯 – knittl 2009-09-09 16:08:18

2

ArrayObject的在需要序列化時最爲有用。

您也可以通過擴展arrayObject來創建自己的集合類。然後你可以序列化你的類對象來傳輸數據。

對於簡單和通常的操作數組比arrayObject更具可比性。

0

Array對象可以被擴展並且功能被超越。 例如,您的append()函數調用可能父::追加()

8

在性能方面之前格式的數字到小數點後兩位,你不會注意到的arrayArayObject之間的真正區別。 我運行一個簡單的測試。這個想法是使用array()和新的ArrayObject創建數組,並用越來越多的值填充它們。

<?php 
for($i = 0; $i < 2; $i++){ 
    $method = $i == 0 ? 'array' : 'ArrayObject'; 
    for($j = 0; $j < 7 ; $j++){ 
     for($k = 0; $k < 100; $k++){ 
      $max = pow(10,$j); 
      $array = $method == 'array' ? array() : new ArrayObject; 
      $time = explode(' ',microtime()); 
      $sTime = $time[0] + $time[1]; 
      for($l = 0; $l < $max; $l++){ 
       $array[] = 'foo ' . $i . ':' . $j . ':' . $k . ':' . $l; 
      } 
      $time = explode(' ',microtime()); 
      $eTime = $time[0] + $time[1]; 
      $results[$method][$max][] = $eTime - $sTime; 
     } 
    } 
} 
?> 

結果

method    lines  average (µs) difference between methods (µs) 
array     1   2.470   -1.044 
array     10   8.452   +0.315 
array    100   71.862  +10.719 
array    1,000   773.826  +141.962 
array    10,000  7,868.731  -675.359 
array   100,000  76,954.625 -17,665.510 
array   1,000,000  801,509.550 -84,356.148 
ArrayObject   1   3.514   +1.044 
ArrayObject   10   8.137   -0.315 
ArrayObject   100   61.142  -10.719 
ArrayObject  1,000   631.864  -141.962 
ArrayObject  10,000  8,544.090  +675.359 
ArrayObject  100,000  94,620.135 +17,665.510 
ArrayObject 1,000,000  885,865.698 +84,356.148 

平均是100個測試每種方法和線的每個數字的平均時間。 方法之間的差異是非常微不足道的(84微秒,當你處理一百萬行時......)

我已經多次運行此測試,並且因爲差異始終是微秒問題,有時一種方法是一個測試過程中更有效率,那麼接下來的測試過程中效率低......

選擇將取決於您的需求:

  • ,如果你處理簡單數組,並做圈狀foreach()或計算平均而言,一個array就夠了,
  • 如果您需要更復雜的迭代,排序,過濾......使用您自己的迭代器方法擴展ArrayObject class更容易...
+7

請指定版本的PHP,這是相當重要的。 – Astery 2015-01-03 17:00:32

+1

對我來說,當處理一百萬行時,差異是84 *毫秒*(84 365 *微秒*)......並不是說在大多數情況下差異是顯着的。 – Erk 2017-06-24 20:57:19