2012-02-14 11 views
6

Tengo una pregunta que no puedo encontrar una respuesta.php array referencia que pasa a la función

estoy construyendo una gran matriz que contiene los valores hexadecimales de un archivo (como $array[0]=B5$array[1]=82 y así sucesivamente hasta $array[1230009])

Cuando creo una función para manipular algunas compensaciones en esa matriz y pasar el $array como referencia (function parse(&$array) { ... }) tarda mucho más que si paso el arreglo normalmente (function parse($array) { ... }) ..

¿Cómo es eso posible?

PD: ¿Hay alguna forma más rápida de no utilizar matriz? Solo para usar $ string = "B5 82 00 1E ..etc", pero necesito seguir el Offset a medida que avance en la lectura de valores hexadecimales, ya que algunos de estos valores contienen longitudes "

+1

Se tarda más en pasar la matriz, o se necesita más tiempo para llevar a cabo su función en la matriz que se ¿pasar? Además, este no es un medio eficiente de RAM para hacer referencia a cada byte de un archivo. Deberías usar cadenas en lugar de methinks. – crush

+0

posible duplicado de [En PHP (> = 5.0), ¿está pasando por referencia más rápido?] (Http://stackoverflow.com/questions/178328/in-php-5-0-is-passing-by-reference-faster) – PeeHaa

+0

tarda unos 30 segundos para realizar la función en la matriz (por referencia) y 2 segundos para realizar la función en la matriz por paso normal – pufos

Respuesta

3

Hay algunas informaciones que pueden ayudar en el siguiente artículo: Do not use PHP references

Cerca del final de ese puesto, Johannes Mensajes la porción de código siguiente (citando):

function foo(&$data) { 
    for ($i = 0; $i < strlen($data); $i++) { 
     do_something($data{$i}); 
    } 
} 

$string = "... looooong string with lots of data ....."; 
foo(string); 

Y una parte del comentario que la acompaña es (sigue citando):

Pero ahora, en este caso, el desarrollador intentó ser inteligente y ahorrar tiempo al pasando una referencia.
Pero bueno, strlen() espera una copia.
copia en escritura no se puede hacer en referencias tan $data se copian para llamar strlen(), strlen() va a hacer absolutamente sencilla operación - de hecho strlen() es una de las funciones más triviales en PHP - y la copia será destruida inmediatamente.

Es posible que también esté en una situación como ésta, teniendo en cuenta la pregunta que usted está pidiendo ...

+0

EDITADO: Ok, entiendo ahora pero: cómo usar cadenas como $ string = " B5 82 00 1E .... etc "? Pero necesito iniciar sesión en cada valor hexadecimal y necesito mantener el desplazamiento a medida que avanzo en su lectura – pufos

Cuestiones relacionadas