W3docs

range()

La funzione range() in PHP genera un array con una sequenza di elementi tra un valore iniziale e uno finale, con passo opzionale.

Introduzione

range() è una funzione PHP integrata che costruisce un array contenente una sequenza di elementi da un valore iniziale a un valore finale. Invece di scrivere un ciclo per inserire numeri o lettere in un array uno per uno, si descrivono i punti estremi (e facoltativamente un passo) e PHP riempie tutto ciò che sta nel mezzo.

Questa pagina tratta la sintassi, ogni tipo di range generabile (crescente, decrescente, interi, float e caratteri), le insidie più comuni e dove range() si inserisce nel codice reale.

Sintassi

range(string|int|float $start, string|int|float $end, int|float $step = 1): array

Dove:

  • $start: Il primo valore della sequenza.
  • $end: L'ultimo valore della sequenza.
  • $step: Facoltativo. La quantità aggiunta tra i valori. Il valore predefinito è 1. Deve essere un numero positivo — range() determina la direzione da $start e $end, non dal segno del passo.

Due cose vale la pena memorizzare subito:

  • Entrambi gli estremi sono inclusi. range(0, 5) restituisce sei elementi (da 0 a 5), non cinque.
  • Il risultato è sempre un nuovo array indicizzato da zero — le chiavi sono 0, 1, 2, … indipendentemente dai valori al suo interno.

Esempi

Generare numeri da 0 a 5

La chiamata più semplice accetta un inizio e una fine. Notare che 5 è incluso nel risultato:

php— editable, runs on the server

Output:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)

Usare numeri negativi

$start e $end possono essere negativi, e la sequenza avanza comunque di 1:

php— editable, runs on the server

Output:

Array
(
    [0] => -5
    [1] => -4
    [2] => -3
    [3] => -2
    [4] => -1
    [5] => 0
    [6] => 1
    [7] => 2
    [8] => 3
    [9] => 4
    [10] => 5
)

Saltare valori con un passo

Il terzo argomento imposta l'incremento. Qui è 2, quindi vengono prodotti solo i numeri pari:

php— editable, runs on the server

Output:

Array
(
    [0] => 0
    [1] => 2
    [2] => 4
    [3] => 6
    [4] => 8
    [5] => 10
)

Generare un range di caratteri

Quando $start e $end sono singoli caratteri, range() percorre l'alfabeto tra di essi. Questo è utile per costruire menu A–Z, etichette di colonne o dati di test:

php— editable, runs on the server

Output:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => g
    [7] => h
    [8] => i
    [9] => j
    [10] => k
    [11] => l
    [12] => m
    [13] => n
    [14] => o
    [15] => p
    [16] => q
    [17] => r
    [18] => s
    [19] => t
    [20] => u
    [21] => v
    [22] => w
    [23] => x
    [24] => y
    [25] => z
)

Conto alla rovescia con un range decrescente

Se $start è maggiore di $end, range() conta automaticamente al contrario. Non si passa un passo negativo — il passo rimane positivo:

<?php

$countdown = range(5, 1);
print_r($countdown);

Output:

Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)

Usare un passo float

Il passo può essere un float, il che consente di costruire sequenze frazionarie — utile per cursori, assi di grafici o valori campionati:

<?php

$fractions = range(0, 1, 0.25);
print_r($fractions);

Output:

Array
(
    [0] => 0
    [1] => 0.25
    [2] => 0.5
    [3] => 0.75
    [4] => 1
)

Insidie comuni

  • Il range è inclusivo. range(1, 3) restituisce [1, 2, 3]. Se ci si aspettava un risultato di lunghezza pari a $end, si sarà fuori di uno.
  • Mantenere il passo positivo. La direzione è determinata dall'ordine di $start e $end. Passare un passo negativo (ad esempio range(0, 5, -1)) è un errore — le versioni PHP precedenti emettevano un avviso, mentre PHP 8.3+ lancia un ValueError. Anche un passo di 0 non è valido.
  • L'ultimo elemento potrebbe essere saltato. range(0, 10, 3) produce [0, 3, 6, 9]10 non è raggiungibile da 0 con passi di 3, quindi la sequenza si ferma all'ultimo valore che rientra.
  • I float possono essere imprecisi. Poiché i numeri in virgola mobile non possono rappresentare esattamente ogni decimale, un passo come 0.1 potrebbe non atterrare sul valore atteso. Arrotondare i risultati, oppure iterare sugli interi e dividere in seguito, quando la precisione è importante.
  • La memoria cresce con la dimensione. range(0, 1000000) costruisce un array da un milione di elementi in memoria. Se si ha solo bisogno di iterare, un ciclo for o SplFixedArray evita l'allocazione.

Quando usare range()

range() è ideale ogni volta che si ha bisogno di una sequenza già pronta anziché di un contenitore vuoto:

  • Per guidare un ciclo. Combinarlo con foreach per iterare su un intervallo fisso: foreach (range(1, 12) as $month) { … }.
  • Per costruire liste di opzioni — anni, giorni del mese, o lettere da A a Z per un menu a tendina.
  • Per abbinarlo a array_map() per trasformare ogni valore, ad esempio array_map(fn($n) => $n * $n, range(1, 5)) per i quadrati.

Se invece si desidera un array con lo stesso valore ripetuto, è preferibile usare array_fill() anziché range(). Per ulteriori informazioni sugli array in generale, consultare la guida agli array PHP.

range() crea un array indicizzato da zero di valori sequenziali tra due estremi. Funziona con interi, float e caratteri, conta in su o in giù e accetta un passo opzionale. Ricordare che entrambi gli estremi sono inclusivi, il passo è sempre positivo e i range di grandi dimensioni allocano vera memoria — e diventa una delle one-liner più comode di PHP.

Pratica

Pratica
Cosa fa la funzione range() in PHP?
Cosa fa la funzione range() in PHP?
Was this page helpful?