Foros del Web » Programando para Internet » PHP »

Funcion Swap (Intercambio) de variables

Estas en el tema de Funcion Swap (Intercambio) de variables en el foro de PHP en Foros del Web. Hola, he leído que PHP no tiene punteros y no se si lo que quiero se va a poder hacer, aunque es muy simple en ...
  #1 (permalink)  
Antiguo 12/01/2008, 22:11
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Pregunta Funcion Swap (Intercambio) de variables

Hola, he leído que PHP no tiene punteros y no se si lo que quiero se va a poder hacer, aunque es muy simple en otros lenguajes como C.

Veamos un ejemplo seria:

Código PHP:
<? 
function swap($a,$b)
{
    
$aux=$pepe;
    
$pepe=$juan;
    
$juan=$aux;
}

$pepe=1;
$juan=2;

swap($pepe,$juan);

?>
Lo que intento es simplemente cambiar los valores de las variables y que se sigan llamando igual. El problema es que como no hay punteros, cuando salen de la función $pepe y $juan siguen valiendo lo mismo. En C esta función seria muy simple pasando los parámetros por referencia pero por PHP no se si se puede hacer.

He pensado en global o devolver un array con 2 posiciones (pero no seria algo limpio y no quiero hacer return's).

Alguien mas experimentado que me pueda iluminar? Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #2 (permalink)  
Antiguo 12/01/2008, 23:40
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 9 meses
Puntos: 2
Re: Funcion Swap (Intercambio) de variables

Hola, bueno... de algo si estoy seguro.. si tienes una variable fuera de tu función y la quieres usar adentro, debes usar: global $variable;

En cuanto a tu función, pues no produciria ningun resultado ya que $a, y $b que estàs pasando como parametros no los usas dentro de la función.

Creo que forzosamente tendrás que usar el global. Por que dices que no sería limpio? jeje

Ya me quede con la intriga de lo que estás haciendo, podrías postear tu código... es que por lo que dices.. no veo la necesidad de hacer una función. Imagino que debes hacer muchas veces el cambio de valores, estas con un for o en varias partes del código quieres hacer el cambio o que onda? jeje y a mi se me ocurre esto:

Código PHP:
<?php
$pepe 
1;
$juan 2;
$a 'pepe';
$b 'juan';

function 
swap($var1$var2){
    global $
$var1, $$var2;
    
$aux = $$var1;
    $
$var1 = $$var2;
    $
$var2 $aux;
}
swap($a,$b);

echo 
" \$pepe = "$pepe " \$juan = " $juan;
?>
ó bien:

Código PHP:
<?php
$pepe 
1;
$juan 2;

function 
swap(){
    global 
$pepe $juan;
    
$aux $pepe;
    
$pepe $juan;
    
$juan $aux;
}
swap();

echo 
" \$pepe = "$pepe " \$juan = " $juan;
?>

pero no se exactamente cómo lo tengas que usar... por eso mi duda sobre el contexto donde vas a usar este código.

Última edición por eskorbutin; 12/01/2008 a las 23:49
  #3 (permalink)  
Antiguo 13/01/2008, 01:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Funcion Swap (Intercambio) de variables

Solo es cuestion de pasar la REFERENCIA a tu funcion:
Código PHP:
function swap(&$a,&$b)
{
    
$aux=$a;
    
$a=$b;
    
$b=$aux;

Saludos.
  #4 (permalink)  
Antiguo 13/01/2008, 02:25
Avatar de eskorbutin  
Fecha de Ingreso: junio-2006
Mensajes: 65
Antigüedad: 17 años, 9 meses
Puntos: 2
Re: Funcion Swap (Intercambio) de variables

Woooow, esa no me la sabía jaja, bueno.. he aprendido algo nuevo, y de paso saludo de nuevo a mis estimado GatorV que siempre está ahi para dar la solución perfecta dentro de lo que cabe en sus posibilidades.

Bueno, me voy a dormir, voy a soñar con las REFERENCIAS. No sabía que además ya no tienes que usar el global, mira que bien está eso...
  #5 (permalink)  
Antiguo 13/01/2008, 12:40
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Funcion Swap (Intercambio) de variables

GatorV sencillamente limpio y eficiente. Desconocía que el operador & también podía usarse en PHP.

Muchas gracias a ambos.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.