2010-09-22 7 views
5

Vamos a suponer que tenemos una serie como estaPHP: ¿se puede determinar el nombre y la clave del conjunto principal a partir de una referencia a un elemento del conjunto?

$arr=array(array('a'=>1,'b'=>2),array('c'=>3,'d'=>4)); 

y una referencia a uno de sus elementos

$element=&$arr[1]['c']; 

Mi pregunta es ¿es posible volver a la matriz original mediante la referencia a solas? Eso es volver a la matriz principal de alguna manera sin saberlo por su nombre ... Esto me sería útil en un escenario más complejo.

+0

Esta pregunta justifica la necesidad de un operador 'is' en PHP. Si puede asignar una referencia, realmente debería haber una manera de probar fácilmente (y no intrusivamente) si ya lo hizo. – cHao

Respuesta

0

No puede obtener desde $element hasta $arr. Puede usar in_array(), por supuesto, pero nada sobre $element contiene una referencia a $arr.

5

No, ciertamente no es posible. Ser una "referencia" (como PHP lo llama, en realidad es un inhibidor de la copia) no ayuda en absoluto en ese asunto. Deberá almacenar la matriz original junto con el elemento.

$elArrPair = array(
    "container" => $arr, 
    "element" => &$arr[1]['c'], 
); 

De esta manera usted puede cambiar el elemento con $elArrPair["element"] = $newValue y aún así ser capaz de acceder al contenedor.

+0

+1 para la matriz de contenedores, técnica interesante –

0

Copia el contenido de una variable a otra, nada más, no hay conexión entre las dos variables.

+0

Sin duda, * puede ser * una "conexión". '$ b ['proof'] = & $a; $ a = '¿ver?' print $ b ['proof']; '. Ahora, eso no significa que puedas * saber * que '$ a' también se conoce como' $ b ['proof'] ', pero hay un vínculo obvio entre los dos. – cHao

+0

bueno, si de eso se tratara esta pregunta, claramente puede guardar una referencia en un Elemento de una matriz, o cualquier otra variable, y acceder al contenido de la variable a la que apunta ... – Hannes

+0

No solo acceso. *Cambio*. Las dos variables básicamente se convierten en nombres para el mismo objeto. Decir "no hay conexión" es simplificar en exceso. – cHao

Cuestiones relacionadas