lequel devrait être utilisé pour manipuler des données, un tableau ou un objet tableau? Comme la recherche, le tri et d'autres manipulations de tableaux.PHP Array et ArrayObject
Répondre
Le type de base est array
. Ceci est une carte des clés et des valeurs qui peuvent être écrites, lues et consultées dans une boucle.
Le ArrayObject
est une classe que vous pouvez étendre pour créer des objets qui se comportent comme s'ils étaient des tableaux. Il implémente des méthodes telles que count
et sort
qui vous permettent de traiter un objet comme si vous traitez un tableau. Cela fait partie du SPL (Standard PHP Library).
Généralement, vous utiliseriez array
. Vous saurez quand vous avez besoin de ArrayObject
.
La plupart du temps, un tableau est tout ce dont vous avez besoin. ArrayObject est plus utile lorsqu'il est étendu pour la fonctionnalité dans des utilisations particulières.
vous utilisez array
pour de simples (standard) tableaux
ArrayObject
est une classe, qui peut être utilisé pour améliorer vos propres classes à utiliser sous forme de tableaux (par exemple une classe Collection de la vôtre)
de 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 un tableau d'opérations simple et habituel est plus préférablement que arrayObject.
Array L'objet peut être étendu et les fonctions peuvent être surchargées. Par exemple, votre fonction append() pourrait mettre en forme un nombre à deux décimales avant d'appeler parent :: append()
En terme de performance, vous ne remarquerez pas une réelle différence entre un array
et un ArayObject
. Je cours un test simple. L'idée était de créer des tableaux en utilisant array() et new 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 procédé et chaque nombre de lignes. La différence entre les méthodes est tout à fait insignifiante (84 microsecondes quand vous faites face à un million de lignes ...)
J'ai exécuté ce test plusieurs fois, et parce que les différences sont toujours une question de microsecondes, parfois une méthode est plus efficace au cours d'un test, moins efficace lors du test suivant ...
le choix dépendra de vos besoins:
- si vous traitez avec des tableaux simples, et faire une boucle comme
foreach()
ou calculer un moyenne, unarray
est assez, - Si vous avez besoin d'itérations plus complexes, de tri, de filtrage, ... il est plus facile d'étendre le
ArrayObject class
avec votre propre itérateur, méthodes ...
Avez-vous un exemple de ce que vous voulez faire? – willoller
J'ai besoin de rechercher, trier et d'autres manipulations complexes en utilisant Array essentiellement pour l'utiliser dans l'algorithme. J'ai donc besoin de savoir lequel est le meilleur et le plus rapide. – Imrul