Question

lequel faut-il utiliser pour manipuler des données, un tableau ou un objet tableau? Comme la recherche, le tri et d’autres manipulations de tableaux.

Était-ce utile?

La solution

Le type de base est array . Ceci est une carte de clés et de valeurs sur lesquelles on peut écrire, lire et accéder en boucle.

ArrayObject est une classe que vous pouvez étendre pour créer des objets qui se comportent comme s'il s'agissait de tableaux. Il implémente des méthodes telles que count et sort , qui vous permettent de traiter un objet comme un tableau. Cela fait partie de la SPL (Standard PHP Library).

Typiquement, vous utiliseriez array . Vous saurez quand vous aurez besoin de ArrayObject .

Autres conseils

En termes de performances, vous ne remarquerez pas de réelle différence entre un tableau et un ArayObject . Je lance un test simple. L'idée était de créer des tableaux à l'aide de array () et du nouvel ArrayObject, et de les remplir avec un nombre croissant de valeurs.

<?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;
        }
    }
}
?>

Résultats

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

La moyenne est la durée moyenne des 100 tests pour chaque méthode et chaque nombre de lignes. La différence entre les méthodes est assez minime (84 microsecondes lorsque vous traitez un million de lignes ...)

J'ai exécuté ce test plusieurs fois, et comme les différences sont toujours une question de microsecondes, une méthode est parfois plus efficace lors d'un test, puis moins lors du test suivant ...

Le choix dépendra de vos besoins:

  • si vous utilisez des tableaux simples et faites une boucle comme foreach () ou calculez une moyenne, un tableau suffit,
  • si vous avez besoin d'itérations plus complexes, d'un tri, d'un filtrage, ... il est plus facile de développer la classe ArrayObject avec votre propre itérateur, méthodes ...

arrayObject est surtout utile lorsque la sérialisation est nécessaire.

Vous pouvez également créer votre propre classe de collection en étendant arrayObject. Ensuite, vous pouvez sérialiser votre objet de classe pour transférer des données.

pour les opérations simples et habituelles, array est plus pratique que arrayObject.

vous utilisez array pour des tableaux simples (et standard)

ArrayObject est une classe qui peut être utilisée pour améliorer vos propres classes et les utiliser comme tableaux (par exemple, une classe de collection)

La plupart du temps, un tableau suffit. ArrayObject est particulièrement utile lorsqu'il est étendu à des fonctionnalités particulières.

L'objet Array peut être étendu et les fonctions masquées. Par exemple, votre fonction append () peut formater un nombre avec deux décimales avant d'appeler parent :: append ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top