Categorías: Tutoriales

Indices negativos en un vector con PHP

En la mayoría de los lenguajes de programación de alto y bajo nivel, acceder a un elemento de un vector a través de un índice menor que cero implica acceder a una dirección de memoria que no hemos reservado, y en consecuencia almacenar en un lugar dónde no protegemos el contenido desde el mismo programa.

Para poder usar un índice negativo en el lenguaje C tendremos que declarar otro puntero auxiliar que acceda al espacio de memoria reservado por el anterior para que los menores que cero en ese rango sean equivalentes a sus análogos positivos. El código que ejemplifica este caso:

int a[10] = { /* lo inicializamos a lo que queramos */ };
int *b;
int i;
b = a + 10; /* aquí entra en juego el puntero auxiliar */
for (i = -10; i < 0; i++) {
int x = b[i];
}

Sencillo de entender, pero en PHP la cosa se simplifica con poder usarlo como si de un elemento ubicado en la zona positiva se tratase. Un código de ejemplo para mostrar el funcionamiento en PHP puede ser el siguiente:

$mes[-1] = “Este mes no existe”;
echo “Mes -1: “, $mes[-1], “\n”;
$mes[-100] = “Este mes tampoco existe”;
echo “Mes -100: “, $mes[-100], “\n”;
var_dump($mes);

Y lanzando el script obtenemos lo siguiente:

Mes -1: Este mes no existe
Mes -100: Este mes tampoco existe
array(2) {
[-1]=>
string(18) “Este mes no existe”
[-100]=>
string(23) “Este mes tampoco existe”
}

Sencillo ahora, ¿no? Creo que sobra decir la infinidad de aplicaciones que puede tener este uso. ¿Lo has probado en otros lenguajes?

Alberto Hornero Luque

Contínuamente relacionado con el procesamiento de imágenes y el análisis numérico, se encuentra actualmente trabajando como Ingeniero Técnico en el laboratorio de Métodos Cuantitativos de Teledetección del CSIC. Administrador del portal Linux Hispano centra sus intereses en tecnologías abiertas, desarrollos en la nube y GNU/Linux, y hace poco fundó junto a Javier Carazo una startup, Codection. Puedes seguir sus updates en @ahornero y LinkedIn.

Ver comentarios

  • Con Perl no se puede hacer una cosa así. Si intentamos declarar una cosa así:

    $meses[-3] = 'Mes inexistente';

    Obtendremos este error: Modification of non-creatable array value attempted, subscript -3

    Si primero inicializamos un array con valores, y luego intentamos acceder a la posicion -3:
    my @meses = qw(Enero Febrero Marzo);
    for(@meses){
    print;
    }
    $meses[-3] = 'Mes inexistente';
    for(@meses){
    print;
    }
    Perl entiende que queremos acceder a la ultima posición del vector, -3.

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace