33

データ、配列、または配列オブジェクトの操作に使用する必要があるのはどれですか?検索、並べ替え、その他の配列操作と同様です。

4

6 に答える 6

39

基本的なタイプはarrayです。これは、ループで書き込み、読み取り、アクセスできるキーと値のマップです。

ArrayObject、配列であるかのように動作するオブジェクトを作成するために拡張できるクラスです。のようなメソッドを実装し、配列を処理するのと同じようにオブジェクトを処理できるようにしますcountsortこれはSPL(標準PHPライブラリ)の一部です。

通常はを使用しますarray。いつ必要かわかりますArrayObject

于 2009-09-09T15:36:30.390 に答える
8

arrayパフォーマンスに関しては、との実際の違いに気付くことはありませんArayObject。簡単なテストを実行します。アイデアは、array()とnew 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回のテストの平均時間です。メソッド間の違いは非常に重要ではありません(100万行を処理する場合は84マイクロ秒...)

私はこのテストを何度も実行しましたが、違いは常にマイクロ秒の問題であるため、あるテストではメソッドの効率が高くなり、次のテストでは効率が低下することがあります...

選択はあなたのニーズに依存します:

  • 単純な配列を扱い、次のようなループを実行しforeach()たり、平均を計算したりする場合は、anarrayで十分です。
  • より複雑な反復、並べ替え、フィルタリングなどが必要な場合はArrayObject class、独自のイテレータ、メソッドを使用してを拡張する方が簡単です...
于 2014-11-25T14:13:55.137 に答える
2

arrayObjectは、シリアル化が必要な場合に最も役立ちます。

また、arrayObjectを拡張して、独自のコレクションクラスを作成することもできます。次に、クラスオブジェクトをシリアル化してデータを転送できます。

単純で通常の操作の場合、arrayはarrayObjectよりも好ましいです。

于 2009-09-09T17:31:06.117 に答える
1

array単純な(および標準の)配列に使用します

ArrayObjectはクラスであり、配列として使用される独自のクラスを拡張するために使用できます(たとえば、いくつかのコレクションクラス)。

于 2009-09-09T15:40:16.157 に答える
0

ほとんどの場合、必要なのは配列だけです。ArrayObjectは、特定の用途の機能のために拡張された場合に最も役立ちます。

于 2009-09-09T15:33:16.480 に答える
0

配列オブジェクトを拡張して、関数を上書きすることができます。たとえば、append()関数は、parent :: append()を呼び出す前に、数値を小数点以下2桁にフォーマットできます。

于 2013-08-30T01:32:52.947 に答える