En esta ocasión les traigo una reflexión de cómo realmente se manejan las estructuras de datos en PHP. Para ello es necesario trazar como punto de partida los tipos de datos admisibles en PHP. Los tipos de datos que soporta son: nulo, booleanos, enteros, número de comas flotantes, cadenas de caracteres, colecciones, objetos, punteros a ficheros y funciones. Cada uno de ellos con sus respectivas funciones de comprobación de tipo de datos. Sin embargo, este artículo se centra sobre la estructura de datos que realmente más se explota en PHP, dígase las colecciones o arreglos. En sí, ¿qué son exactamente? Un arreglo en pueden crecer dinámicamente, ser iterados en ambas direcciones con operaciones con costo de O (1). Pueden ser utilizados como pilas, colas, listas enlazadas, tablas hash y diccionarios. Como si estuvieran diseñados para soportar cualquier comportamiento, pero abordando más de cerca surge la pregunta, ¿a qué costo? Si se hiciera una comparación con el lenguaje C, por ejemplo 100 000 enteros ocupan 0.76 MB de memoria, en PHP tomaría alrededor de 13.97MB, contando que cada variable entera en PHP ocupa 48bytes de memoria. Entonces, ¿cómo realmente se puede optimizar el uso de arreglos? La respuesta viene puesta exactamente en el contexto en que se esté desarrollando la solución, claro con algunas características que ayuden a identificar la situación, por ejemplo, si se conoce la longitud exacta del arreglo y se sabe que no va a exceder además de que el acceso es a través de índices enteros, entonces se puede utilizar la clase SplFixedArray.

fixedArray

Si en el contexto, el arreglo se comporta como una cola, en vez de realizar las operaciones sobre un arreglo como array_shift, bien se pudiera utilizar la clase SlpQueue.

queue

De manera similar sucede con las pilas

stack

En cambio, si trabajan con conjunto de elementos que no importa el orden que se encuentren, se puede utilizar la clase conjunto para almacenarlos

set

Incluso existe el soporte para árboles parcialmente ordenados, los Heaps

he

Pues sí, según lo que se resuelva, el contexto de la solución es aconsejable utilizar estructuras de datos más específicas, haciendo el código más legible y rápido

Fuente http://www.slideshare.net/patrick.allaert/mastering-php-data-structure–02-php-day-2012

Anuncios