¿Qué es mejor para usar en PHP para anexar a un miembro de la matriz:

$array[] = $value;

o

array_push($array, $value);

Aunque el manual dice que es mejor evitar una llamada a una función, también he leído $array[] es mucho más lento que array_push(). ¿Alguien tiene alguna aclaración o puntos de referencia?

  • $myArray[] = 123; Esto será más rápido que array_push función. Se añade directamente el valor en la matriz. La función de pila separada para las variables. y puede que la instrucción dentro de la función.
InformationsquelleAutor alex | 2009-02-18

10 Comentarios

  1. 132

    No había puntos de referencia, pero yo, personalmente, siento como $array[] es más limpio a la vista, y honestamente nimio más de milisegundos es bastante irrelevante, a menos que usted planea en anexar a cientos de miles de cadenas de su matriz.

    Editar: Corrió este código:

    $t = microtime(true);
    $array = array();
    for($i = 0; $i < 10000; $i++) {
        $array[] = $i;
    }
    print microtime(true) - $t;
    print '<br>';
    $t = microtime(true);
    $array = array();
    for($i = 0; $i < 10000; $i++) {
        array_push($array, $i);
    }
    print microtime(true) - $t;

    El primer método que utiliza $array[] es casi 50% más rápido que el segundo.

    Algunos resultados de referencia:

    Run 1
    0.0054171085357666 //array_push
    0.0028800964355469 //array[]
    
    Run 2
    0.0054559707641602 //array_push
    0.002892017364502 //array[]
    
    Run 3
    0.0055501461029053 //array_push
    0.0028610229492188 //array[]

    Esto no debería ser sorprendente, ya que el manual de PHP notas este:

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

    La forma en que está escrita no me sorprendería si array_push es más eficiente cuando la adición de varios valores. EDITAR: por curiosidad, hice algunas pruebas adicionales, e incluso para una gran cantidad de adiciones, individual $array[] llamadas son más rápidos que un gran array_push. Interesante.

    • Yo siempre prefiero saber cual es la manera más rápida de modo que cuando llegue el día en que yo le pedirá para producir un alto volumen de tráfico del sitio, voy a tener un poco de perspicacia. Gracias por la respuesta.
    • Micro-optimizaciones como estos son los que rara vez vale la pena el esfuerzo. Si usted está escribiendo desde cero, ¿ cómo hace más sentido, y sólo entonces, si es un poco lento para producir una página de perfil. Las posibilidades de conseguir todo el camino hacia abajo a tener que cambiar algo como esto a la velocidad de las cosas es leve.
    • Su punto de referencia los resultados son etiquetados al revés
    • Sólo para asegurarse, ya que el código se parece a la falta de coincidencia de la salida, he comprobado que $array[] es de hecho mucho más rápido, 300ms vs 2000ms de 1M asignaciones en mi máquina. Sin embargo, la adición de 20 elementos a la vez en array_push fue tan rápido como 20 $array[] =s.
    • Micro-optimizaciones no vale la pena el esfuerzo si estás pensando en ir de nuevo a través de todo el código base y la ‘optimización’ es. Sin embargo, si usted tiene varias formas de hacer la misma cosa y son conscientes de que una forma es mejor (aunque sea un poco) de los demás, usted puede hacer que su hábito de usar de esa manera. ¿Por qué no hacerlo?
    • Debo disentir, o al menos parcialmente, si usted sabe mejor, escribir mejor, pero no ponen mucho esfuerzo a la búsqueda de es posible micro-optimización…
    • array_push($array1,$array2) puede ser mejor para aquellos que son nuevos en PHP, simplemente porque el olvido de los paréntesis en la asignación puede causar un muy mal día. Yo personalmente uso $array1[] = $array2 sin embargo.
    • Recordatorio para cualquier espectador: no todos los menores de optimización es la «prematura de optimización» que es la raíz de todos los males como dijo Knuth. Algunos poco más rápido que las cosas son poco más rápido las cosas. recordando $matriz[]=$s ok, peinando su codebase para array_push no lo es. No prematuramente vencer a la prematura-optimización-es-el mal tambor simplemente porque existe.

  2. 38

    El principal uso de array_push() es que usted puede empujar a varios valores en la final de la matriz.

    Se dice en el documentación:

    Si utiliza array_push() para añadir una
    elemento de la matriz es mejor
    el uso de $matriz[] = porque de esa manera
    no hay sobrecarga de llamar a un
    función.

  3. 18

    La palabra en la calle es que [] es más rápido porque no hay sobrecarga de la llamada a la función. Además, nadie realmente le gusta de PHP, funciones de la matriz…

    «Es…pajar, de la aguja….o es la aguja del pajar…ah, f*** * * es…[] = «

    • Eh? PHP funciones de la matriz son impresionantes.
    • Funcionalmente son impresionante, sí, pero él se refería a la falta de coherencia de un esquema de nombres.
    • Usted debe activar el parámetro que se insinuaba en el IDE. Pero estoy de acuerdo, un poco de coherencia habría sido genial.
    • Yeh me gustaría pasar un poco más tiempo en php manual de no ser por parámetro sugerencias.. o intellisense, ya que algunos programas de la llamada que yo creo?
    • Estoy de acuerdo en esto. No hay coherencia ni en el esquema de nomenclatura (x_y o xy o y_x …) ni en los parámetros de la lógica de (pase al objeto de destino, primero, último, entre las matrices, cadenas y regex, buena suerte para encontrar una regla común!).
    • ¿qué es el IDE?
    • Realmente no es un IDE, pero yo uso Notepad++ (que tiene un parámetro de sugerencias)
    • FWIW, me gusta el ag/pajar de la convención de nomenclatura y es fácil de recordar, ya que va en el mismo orden de la frase: «como encontrar una aguja (1) en un pajar (2)»

  4. 8

    Una diferencia es que se puede llamar array_push() con más de dos parámetros, es decir, se puede enviar más de un elemento en un tiempo de una matriz.

    $myArray = array();
    array_push($myArray, 1,2,3,4);
    echo join(',', $myArray);

    imprime 1,2,3,4

  5. 2

    Una simple $myarray[] declaración será más rápido, ya que son sólo apretar un elemento en la pila de los artículos debido a la falta de sobrecarga que una función traería.

  6. 2

    Desde «array_push» es una función y se llama varias veces cuando está dentro del bucle, de modo que se asigne una memoria en la pila.
    Pero cuando estamos usando $array[] = $valor, a continuación, acabamos de asignar valor a la matriz.

  7. 1

    Segunda es una llamada a una función así, en general, debe ser más lento que el uso de núcleo de la matriz de características de acceso. Pero creo que incluso una consulta de base de datos dentro de tu script outweight de 1.000.000 de llamadas a array_push().

  8. 0

    Aunque la pregunta era más sobre el rendimiento, la gente llegará a esta pregunta preguntaba si es una buena práctica utilizar array_push o $arr[].

    La función podría significar menos líneas para varios valores:

    //1 line:
    array_push($arr, "Bob", "Steve");
    //versus 2 lines:
    $arr[] = "Bob";
    $arr[] = "Steve";

    Sin embargo, array_push

    • no puede recibir las claves del array
    • rompe el aguja/pajar convención de nomenclatura
    • es más lento, como ha sido discutido

    Yo le pegue con $arr[].

  9. 0

    Sólo me quieres agregar : int array_push(...) volver
    el nuevo número de elementos de la matriz (php doc). lo que puede ser útil y más compacto que $myArray[] = ...; $total = count($myArray);.

    También array_push(...) es significativa cuando la variable es utilizada como pila.

Dejar respuesta

Please enter your comment!
Please enter your name here