PHP Inizializzazione di una matrice


Esempio

Un array può essere inizializzato vuoto:

// An empty array
$foo = array();

// Shorthand notation available since PHP 5.4
$foo = [];

Un array può essere inizializzato e preimpostato con valori:

// Creates a simple array with three strings
$fruit = array('apples', 'pears', 'oranges');

// Shorthand notation available since PHP 5.4
$fruit = ['apples', 'pears', 'oranges'];

Un array può anche essere inizializzato con indici personalizzati (chiamati anche array associativi) :

// A simple associative array
$fruit = array(
   'first'  => 'apples',
   'second' => 'pears', 
   'third'  => 'oranges'
);

// Key and value can also be set as follows
$fruit['first'] = 'apples';

// Shorthand notation available since PHP 5.4
$fruit = [
    'first'  => 'apples', 
    'second' => 'pears', 
    'third'  => 'oranges'
];

Se la variabile non è stata utilizzata in precedenza, PHP la creerà automaticamente. Mentre conveniente, questo potrebbe rendere il codice più difficile da leggere:

$foo[] = 1;     // Array( [0] => 1 )
$bar[][] = 2;   // Array( [0] => Array( [0] => 2 ) )

L'indice continuerà di solito dove era stato interrotto. PHP tenterà di utilizzare stringhe numeriche come numeri interi:

$foo = [2 => 'apple', 'melon'];  // Array( [2] => apple, [3] => melon )
$foo = ['2' => 'apple', 'melon']; // same as above
$foo = [2 => 'apple', 'this is index 3 temporarily', '3' => 'melon']; // same as above! The last entry will overwrite the second!

Per inizializzare un array con dimensioni fisse puoi usare SplFixedArray :

$array = new SplFixedArray(3);

$array[0] = 1;
$array[1] = 2;
$array[2] = 3;
$array[3] = 4; // RuntimeException

// Increase the size of the array to 10
$array->setSize(10);

Nota: un array creato utilizzando SplFixedArray ha un ingombro di memoria ridotto per insiemi di dati di grandi dimensioni, ma le chiavi devono essere numeri interi.


Per inizializzare un array con una dimensione dinamica ma con n elementi non vuoti (ad esempio un segnaposto) puoi usare un loop come segue:

$myArray = array();
$sizeOfMyArray = 5;
$fill = 'placeholder';

for ($i = 0; $i < $sizeOfMyArray; $i++) {
    $myArray[] = $fill;
}

// print_r($myArray); results in the following:
// Array ( [0] => placeholder [1] => placeholder [2] => placeholder [3] => placeholder [4] => placeholder ) 

Se tutti i segnaposto sono uguali, puoi anche crearlo usando la funzione array_fill() :

array array_fill (int $ start_index, int $ num, valore $ misto)

Questo crea e restituisce una matrice con le voci num di value , le chiavi iniziano da start_index .

Nota: se start_index è negativo, inizierà con l'indice negativo e continuerà da 0 per i seguenti elementi.

$a = array_fill(5, 6, 'banana'); // Array ( [5] => banana, [6] => banana, ..., [10] => banana)
$b = array_fill(-2, 4, 'pear'); // Array ( [-2] => pear, [0] => pear, ..., [2] => pear)

Conclusione: con array_fill() sei più limitato per ciò che puoi effettivamente fare. Il ciclo è più flessibile e ti apre una gamma più ampia di opportunità.

Ogni volta che si desidera un array riempito con un intervallo di numeri (ad esempio 1-4), è possibile aggiungere ogni singolo elemento a un array o utilizzare la funzione range() :

intervallo di matrice (mixed $ start, mixed $ end [, number $ step = 1])

Questa funzione crea una matrice contenente un intervallo di elementi. Sono richiesti i primi due parametri, in cui vengono impostati i punti iniziale e finale dell'intervallo (compreso). Il terzo parametro è facoltativo e definisce la dimensione dei passaggi da eseguire. Creando un range da 0 a 4 con una stepsize di 1 , l'array risultante sarebbe costituito dai seguenti elementi: 0 , 1 , 2 , 3 e 4 . Se la dimensione del passo è aumentata a 2 (cioè range(0, 4, 2) ), la matrice risultante sarebbe: 0 , 2 e 4 .

$array = [];
$array_with_range = range(1, 4);

for ($i = 1; $i <= 4; $i++) {
    $array[] = $i;
}
    
print_r($array); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
print_r($array_with_range); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

range può funzionare con interi, float, booleani (che diventano convertiti in interi) e stringhe. Si deve prestare attenzione, tuttavia, quando si utilizzano float come argomenti a causa del problema di precisione in virgola mobile.