matriz - manejo de array en php
PHP SPL, ¿vale la pena usarlo o las funciones de matriz en bruto son mejores? (1)
Estoy examinando la biblioteca estándar de PHP (SPL). Usé solo arreglos antes y acabo de encontrar que PHP tiene tantas clases estándar. Pero no hay ninguna palabra en el manual si se recomienda usarlo o no. Por ejemplo, recomiendan explícitamente usar la construcción foreach
para iterar matrices porque es más rápido. ¿Y qué hay de esta biblioteca? Si necesito almacenar algunos datos en un objeto, ¿debo usar alguna clase de SPL concreta para mi situación o usar arreglos estándar es mejor de todos modos?
Hay mucho para tu pregunta. ¿Debería utilizar las estructuras de datos SPL? Depende.
La matriz de PHP puede actuar como un mapa, una lista enlazada o una matriz. Muy rara vez realmente desea un solo tipo de datos que actúe como todas esas cosas al mismo tiempo , por lo que la naturaleza enfocada de los tipos de datos SPL no es tan limitante. De hecho, la mayoría de los "forasteros" (y algunos "insiders") considerarían la matriz de PHP como una parodia.
El principal inconveniente de la matriz de PHP es que utiliza mucha memoria. Incluso si solo desea una matriz fija, secuencial e indexada, tiene la sobrecarga de las cosas que se vinculan y el almacenamiento de las claves. A pesar de eso, la matriz de PHP suele ser mucho más rápida que los tipos de objetos si en su mayoría está agregando datos e iterando sobre ellos, probablemente porque la función hace que las cosas se ralenticen.
En general, no veo que mucha gente use las estructuras de datos SPL. Sobre todo, creo, porque en el contexto de PHP y las aplicaciones web generalmente no son muy aplicables. Por lo general, se trata de arreglos pequeños, donde la comodidad de los operadores integrados y las funciones de los arreglos superan cualquier ventaja de los tipos SPL.
Dicho esto:
Si se encuentra en una situación en la que está utilizando una matriz como una lista vinculada (insertando / eliminando en el medio), intente una de las listas SPL doblemente vinculadas.
Si se encuentra usando una matriz indexada grande, intente
SPLFixedArray
. Definitivamente consumirán mucho menos memoria.Si necesita tener un mapa con objetos como la clave, entonces use un
SplObjectStorage
(ya que la matriz de PHP no funciona con las claves de los objetos).Si desea mantener los datos ordenados en una matriz, pruebe uno de los montones.
Realice una evaluación comparativa de la matriz nativa frente al objeto SPL y use el que tenga la compensación de memoria + velocidad + simplicidad que más le convenga.