2011-07-06 13 views
11

Me gustaría tener una función que toma una matriz como entrada y cambia algunos valores de la matriz (en mi caso, la matriz es $ _SESSION, pero creo que realmente no importa).¿Cómo puedo escribir en PHP una función que modifique una matriz?

¿Cómo puedo hacer eso?


AÑADIDO

Suena trivial. Pero no lo es. Solo quiero establecer ciertos valores para la matriz. Por ejemplo, quiero que mi función cambie $ _SESSION ['x'] y $ _SESSION ['y']. Hasta donde sé, si paso una matriz como argumento, entonces cualquier cambio en el argumento no modificará la matriz original. Por ejemplo:

function change_array($x) { 
    $x[0] = 100; 
} 
$x = array(1,2,3); 
change_array($x); 

No cambiará los $ x.


AÑADIDO 2

¿Por qué es rechazada-mi pregunta? Creo que la pregunta no es tan trivial a pesar del hecho de que es corta. También creo que di todos los detalles relevantes. Por lo que me di cuenta (gracias a una respuesta) se trata de "pasar una referencia". Además, el hecho de que quiera modificar $ _SEESION array hace que sea un poco diferente.

+0

Sé más específico. ¿Qué manipulaciones planeas realizar en la matriz? –

+0

¿Por qué quieres pasar '$ _SESSION' como argumento: O?!? ¡Ya es global! –

Respuesta

21

lo que quiere decir su llamamiento: Passing by Reference

es muy simple como

function changearray(&$arr){ 
    $arr['x'] = 'y'; 
} 

puede llamar a esto como:

changearray($_SESSION); 
+0

Creo que es exactamente lo que estaba pidiendo. Algunas personas dicen que $ _SESSION es una matriz "especial" (porque es global). ¿Significa que debería tratarlo de manera diferente (por ejemplo, no debería pasarlo por referencia. Además, no necesito pasarlo como argumento)? – Roman

+1

derechos su global y usted no necesita pasarlo, pero quiero aprender cómo pasar por referencia en php –

+1

¡Muchas gracias! Es genial que puedas obtener lo que necesito de mi breve pregunta original. Gracias. – Roman

0

La codificación es como: -

$_SESSION['index_1'] = 'value 1'; 
$_SESSION['index_2'] = 'value 2'; 

Si desea cambiar el valor para el índice "index_2" poner en valor "value 2 changed", a continuación, sólo escribe simplemente: -

$_SESSION['index_2'] = 'value 2 changed'; 

espero que ayude.

+0

Como mencioné en la publicación original, me gustaría tener una función porque la secuencia de cálculos necesarios para generar un nuevo valor es grande (entonces, me gustaría poner todo en una función). – Roman

-1
function change_array() { 

    global $x; /*this will tell the function to work on the array 'x' out of the function itself.*/ 
    $x[0] = 100; 

} 
Cuestiones relacionadas