Eficacia de la matriz de PHP y aclaración de la memoria

Al declarar una matriz en PHP, el índice puede crearse fuera de servicio … es decir

Matriz [1] = 1 Matriz [19] = 2 Matriz [4] = 3

Mi pregunta. Al crear una matriz como esta, ¿la longitud 19 con nulos en el medio? Si intenté obtener Array [3], ¿vendría sin definir o arrojaría un error? Además, ¿cómo afecta esto a la memoria? ¿Se tomaría la memoria de 3 índices o 19?

También actualmente un desarrollador escribió un script con 3 matrices FailedUpdates [] FailedDeletes [] FailedInserts []

¿Es más eficiente hacerlo de esta manera, o hacerlo en el caso de una matriz asociativa que controla varias matrices secundarias?

"Failures" array(){ ["Updates"] => array(){ [0] => 12 [1] => 41 } ["Deletes"] => array(){ [0] => 122 [1] => 414 [1] => 43 } ["Inserts"] => array(){ [0] => 12 } } 

La eficacia de la memoria no es realmente algo de lo que deba preocuparse en PHP, a menos que se trate de matrices realmente enormes / un gran número de variables.

Una matriz en PHP no es realmente como una matriz en C ++ o un lenguaje de nivel inferior similar; una matriz en PHP es un mapa. Tiene una lista de claves (que debe ser única y de tipo cadena o entero) y una lista de valores correspondiente a las claves. Entonces la siguiente es una matriz legal:

array(0 => 'butt', 1 => 'potato', 2 => 'tulip')

pero también lo es

array(5 => 'i', 'barry' => 6, 19 => array(-1 => array(), 7 => 'smock'))

En ambos casos, hay 3 entradas en el conjunto, por lo tanto, 3 teclas y 3 valores.

Además de las claves y valores en la matriz, una matriz se puede distinguir de otra en el orden en que se producen las parejas clave / valor. Si define una matriz para que tenga enteros no negativos como claves, a menudo será el orden esperado. El orden importa cuando utiliza construcciones como foreach() .

array [3] estará indefinido / no ajustado, pero no causará un error, y la matriz usará solo memoria para esos 3 valores – php no es como C, donde tiene que mirar esas cosas.

  • Accediendo $ arr [3] da un aviso: Notice: Undefined offset: 3 in /data/home/sjoerd/public_html/svnreps/test/a.php on line 3 . Puede evitar esto comprobando con isset() o array_key_exists() .
  • No hay nulos almacenados.
  • Tener elementos vacíos no ocupará memoria extra.
  • Si debe usar múltiples variables o una matriz depende del contexto y cómo usa las variables.