2010-05-30 8 views
7

J'ai 1 tableau que je veux ré-indexer. J'ai trouvé que les deux fonctions array_values et array_merge peuvent faire le travail (et je n'ai pas besoin de 2 tableaux pour que la fonction array_merge fonctionne).array_merge vs array_value pour réinitialiser l'index du tableau

Qu'est-ce qui est le plus rapide pour un très grand réseau? Je comparerais cela, mais je ne sais pas comment et ne pas avoir la grande gamme pour le moment.

Avant réindexer:

Array 
(
    [0] => AB 
    [4] => EA 
    [6] => FA 
    [9] => DA 
    [10] => AF 
) 

Après réindexer:

Array 
(
    [0] => AB 
    [1] => EA 
    [2] => FA 
    [3] => DA 
    [4] => AF 
) 
+0

Je suis la marque de banc, array_value est 3x plus rapide pour et tableau avec 8043 éléments les valeurs de tableau ont pris 0,003291130065918 secondes. La fusion de tableau a pris 0,0096800327301025 secondes. SHUF $ est le tableau non indexé Voici le code pour l'exécution du benchmark (copié sur le web) $ sha1_start = microtime (true); $ arraymerge = array_merge ($ shuf); $ shal_elapsed = microtime (true) - $ sha1_start; $ start = microtime (vrai); $ arrayvalue = array_values ​​($ shuf); $ écoulé = microtime (vrai) - $ start; echo "
les valeurs de tableau ont pris $ seconde écoulée."; echo "
La fusion de tableaux a pris $ shal_elapsed secondes."; – Jamex

Répondre

2

Je n'ai pas fait les benchmarks non plus - et si vous avez besoin d'être sûr, vous devriez les faire. Cela dit, je suppose que si l'un est préférable à l'autre, array_values ​​() va être le chemin à parcourir.

Après tout, ce que vous voulez faire est exactement ce à quoi array_values ​​() a été conçu.

2

array_values ​​est destiné à faire exactement ce que vous voulez faire. Array_merge est fait pour faire autre chose et vous avez une solution de contournement pour le faire fonctionner sur votre cas. (bien que vous puissiez avoir des problèmes si une valeur non numérique est oubliée dans les index).

Je ne sais pas s'il existe des différences de performances significatives, mais il est certain que le code écrit avec les valeurs array_values ​​est plus facile à lire. Et je ne pense pas qu'une fonction destinée à faire quelque chose soit plus lente qu'une autre destinée à faire autre chose.

Espérons que cela aide.

1

Il est important de noter que array_merge() ne réinitialisera les clés de tableau que s'il n'y a aucune clé de chaîne dans la matrice.

3

Je suis la marque de banc, array_value est 3 fois plus rapide (désolé de répondre à ma propre question, la section des commentaires ne conserve pas le format)

et tableau avec 8043 éléments

valeurs du tableau ont pris 0.003291130065918 secondes .

La fusion de matrice a pris 0,0096800327301025 secondes.

$ shuf est le tableau non indexé

Voici le code pour l'exécution du benchmark (copié sur le web)

$sha1_start = microtime(true); 
    $arraymerge = array_merge ($shuf); 
    $shal_elapsed = microtime(true) - $sha1_start; 


    $start = microtime(true); 
    $arrayvalue = array_values ($shuf); 
    $elapsed = microtime(true) - $start; 

echo "<br>array values took $elapsed seconds."; 
echo "<br>array merge took $shal_elapsed seconds."; 
+0

Merci pour cette clarification! Peut-être que vous pourriez accepter celui-ci comme réponse ici :) – xvilo