PHP Inicializando una matriz


Ejemplo

Una matriz se puede inicializar vacía:

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

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

Una matriz se puede inicializar y preestablecer con valores:

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

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

Una matriz también se puede inicializar con índices personalizados (también llamada matriz asociativa) :

// 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'
];

Si la variable no se ha utilizado antes, PHP la creará automáticamente. Si bien es conveniente, esto podría hacer que el código sea más difícil de leer:

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

El índice usualmente continuará donde lo dejaste. PHP intentará usar cadenas numéricas como enteros:

$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!

Para inicializar una matriz con un tamaño fijo, puede usar 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: una matriz creada con SplFixedArray tiene una huella de memoria reducida para grandes conjuntos de datos, pero las claves deben ser enteros.


Para inicializar una matriz con un tamaño dinámico pero con n elementos no vacíos (por ejemplo, un marcador de posición), puede usar un bucle de la siguiente manera:

$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 ) 

Si todos sus marcadores de posición son iguales, también puede crearlo utilizando la función array_fill() :

array array_fill (int $ start_index, int $ num, mixed $ value)

Esto crea y devuelve una matriz con num entradas de value , llaves a partir de start_index .

Nota: Si el start_index es negativo, comenzará con el índice negativo y continuará desde 0 para los siguientes elementos.

$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)

Conclusión: con array_fill() estás más limitado por lo que realmente puedes hacer. El bucle es más flexible y le abre una gama más amplia de oportunidades.

Cuando quiera que una matriz se llene con un rango de números (por ejemplo, 1-4), puede agregar cada elemento a una matriz o usar la función range() :

rango de matriz (mezcla $ inicio, mezcla $ final [, número $ paso = 1])

Esta función crea una matriz que contiene un rango de elementos. Los primeros dos parámetros son necesarios, donde establecen los puntos de inicio y final del rango (inclusive). El tercer parámetro es opcional y define el tamaño de los pasos que se están tomando. Al crear un range de 0 a 4 con un stepsize de stepsize de 1 , la matriz resultante consistirá de los siguientes elementos: 0 , 1 , 2 , 3 y 4 . Si el tamaño del paso se incrementa a 2 (es decir, range(0, 4, 2) ), la matriz resultante sería: 0 , 2 y 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 puede trabajar con enteros, flotadores, valores booleanos (que se convierten en enteros) y cadenas. Sin embargo, se debe tener precaución al usar flotantes como argumentos debido al problema de precisión de punto flotante.