Diferencia entre array_push () y $ array [] =


117

En el manual de PHP, ( array_push ) dice ..

Si usa array_push () para agregar un elemento a la matriz, es mejor usar $ array [] = porque de esa manera no hay sobrecarga de llamar a una función.

Por ejemplo :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

vs

$arr[] = "stackoverflow";
print_r($arr);

No entiendo por qué hay una gran diferencia.


8
Uno es una llamada de función, el otro no lo es. Exactamente lo que se menciona en el cuadro.
KingCrunch

1
Una es la llamada a la función como se mencionó anteriormente, lo que significa el uso de algunos recursos para cambiar el control hacia / desde la llamada a la función (por lo tanto, resultó en un procesamiento general). Considerando que, más tarde es simplemente asignar un nuevo elemento a la matriz de inmediato.
Ghazanfar Mir

2
esta pregunta me ahorró mucho tiempo empujando a matrices :)
RozzA

Respuestas:


151

Cuando llama a una función en PHP (como array_push()), hay gastos generales en la llamada, ya que PHP tiene que buscar la referencia de la función, encontrar su posición en la memoria y ejecutar cualquier código que defina.

El uso $arr[] = 'some value';no requiere una llamada a función e implementa la adición directamente en la estructura de datos. Por lo tanto, al agregar una gran cantidad de datos, su uso es mucho más rápido y eficiente en cuanto a recursos $arr[].


3
¿Qué pasa si dicha notación "$ arr [] = 'algún valor';" se reduce a la llamada de función?
Tebe

1
@gekannt ¿Cómo sucedería eso? ¿Quiere decir si "algún valor" en su comentario es un cierre? Eso almacenaría la referencia del cierre en la matriz. Si quiere decir que 'algún valor' es una función que se invoca, agregaría lo que devuelva esa función.
Kirkland

Los operadores de @Kirkland son solo funciones con una sintaxis alternativa en la mayoría de los lenguajes similares a C, no soy un experto en PHP, pero puedo imaginar que implementaron operadores de la misma manera ya que es un dialecto C.
Kevin

1
@Kevin: estoy de acuerdo con usted y estoy bastante seguro de que hay una función detrás de la sintaxis alternativa, no es la mencionada anteriormente, ya que veo el siguiente comentario en la documentación de php: "Si usa array_push () para agregar un elemento a la matriz es mejor usar $ matriz [] = porque de esa manera no hay gastos generales de llamar a una función ". no tengo tiempo ahora para ver exactamente lo que hay detrás, ya que el término de búsqueda es un poco confuso para los motores de búsqueda :)
jnhghy - Alexandru Jantea

¿Existe alguna evidencia real de que $arr[] = valuesea ​​más rápido? Tratando de imaginar por qué el compilador trataría el código de manera diferente.
c ..

44

Puede agregar más de 1 elemento de una sola vez a la matriz usando array_push,

p.ej array_push($array_name, $element1, $element2,...)

Donde $ element1, $ element2, ... son elementos que se agregarán a la matriz.

Pero si desea agregar solo un elemento a la vez, entonces debe preferirse otro método (es decir, usar $ array_name []).


¿Es una mala práctica combinar los dos según sea necesario a lo largo de un proyecto?
PBwebD

1
@ testing123 Absolutamente no. Es una buena práctica utilizar la solución más eficiente disponible a mano, a menos que perjudique gravemente la legibilidad, la compatibilidad, etc. (o si necesita obedecer ciertas guías de estilo).
Chris Kraszewski

15

La diferencia está en la línea de abajo a "porque de esa manera no hay gastos generales de llamar a una función".

array_push()generará una advertencia si el primer argumento no es una matriz. Esto difiere del $var[]comportamiento en el que se crea una nueva matriz.


4
No dije que fuera una razón. En la pregunta, se hizo una diferencia y esta también es la diferencia
Baig

7

Siempre debe usarlo $array[]si es posible porque, como indica el cuadro, no hay gastos generales para la llamada a la función. Por tanto, es un poco más rápido que la llamada a la función.


4

array_push : empuja uno o más elementos al final de la matriz

Tome nota de las palabras " uno o más elementos al final " para hacer eso, usando $arr[]tendría que obtener el tamaño máximo de la matriz


Re "para hacer eso usando $ arr [] tendrías que obtener el tamaño máximo de la matriz" . No, se está confundiendo $arr[...index...] = $value;con lo que se está discutiendo aquí, que es $arr[] = $value;. No es necesario saber el tamaño o la matriz para presionar hasta el final. Múltiples elementos serían simplemente múltiples llamadas: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

explique: 1. el primero declara la variable en la matriz.

2.El segundo método array_push se utiliza para insertar la cadena en la variable de matriz.

3. finalmente imprimirá el resultado.

4.El segundo método es almacenar directamente la cadena en la matriz.

5.Los datos se imprimen en los valores de la matriz usando el método print_r.

estos dos son iguales


1

ambos son iguales, pero array_push crea un bucle en su parámetro que es una matriz y realiza $ matriz [] = $ elemento


0

Sé que esta es una respuesta antigua, pero podría ser útil para otros saber que otra diferencia entre los dos es que si tiene que agregar más de 2/3 valores por ciclo a una matriz, es más rápido de usar:

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

en vez de:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

editar- Olvidé cerrar el corchete para el forcondicional


1
Me pregunto cómo se compara esto con array_merge. Ej for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Supongo que array_push sigue siendo un poco más rápido que eso.
ToolmakerSteve

0

Nadie dijo, pero array_push solo empuja un elemento al FINAL DEL ARRAY, donde $ array [index] puede insertar un valor en cualquier índice dado. Gran diferencia.


La pregunta era la "Diferencia entre array_push () y $ array [] =" lo que he dicho es una diferencia. ¡Uno grande!
Marco

1
Respetuosamente no estoy de acuerdo. Estás describiendo $array[index] = , que es una operación diferente a $array[] = .... La pregunta da dos piezas de código y pregunta por qué habría una diferencia significativa de [rendimiento] entre ellas. La pregunta significa literalmente $array[] = ..., que es un idioma específico de php, que no implica un índice. array + index resuelve un problema diferente, produce un código diferente y es una compensación diferente.
ToolmakerSteve
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.