Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

David Ramires

Trocar Valores entre 2 var....

Recommended Posts

eu faria

$valores = array($b,$a);
list($a,$B)/> = $valores;

trocar os valores sem usar uma terceira variável...

 

Sem usar uma terceira variável.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade ele não conta como uma variavel, o primeiro modelo que eu fiz contava, pois eu colocava o array dentro da variavel, e jogava a variavel no list()

ai não listei os valores delimitados pelo array(), que pode ser chamado de função nativa auxiliar no caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e mais a estrutura pode aderir mais de uma forma

no caso se eu tivesse feito

$var[] = $b

$var[] = $a

 

ai sim iria guardar na memória

 

mais como só usei

list($a,$B ) = array($b,$a);

pracitamente não guardei na memória, porque não atribui a nenhuma variavel, array(); não é uma variavel que guarda valores

tanto que eles seriam perdidos na hora, diferentemente do primeiro exemplo que sim, seria um array na variavel que estaria guardando espaço temporario na memoria

no modo que usei, utilizei a estrutura basica do array, seus indices.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está se referindo ao script PHP.

Quando isso é compilado, em linguagem de máquina, o array ocupa, sim, espaço na memória. Caso contrário, seria impossível armazenar os valores. Você teria de salvá-los em cache ou em registradores do processador, o que não é possível fazer com PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pracitamente não guardei na memória, porque não atribui a nenhuma variavel, array(); não é uma variavel que guarda valores

Defina Array:

_________________________________________________________

 

 

PS: Sempre tive a visão de que um array era um espaço alocado na memória do sistema...podendo conter vários índices.

PS2: Variável "$a" é um array.

PS3: Variável é array ,logo , Array é variável.

 

$txt = 'abc';
echo $txt[1];//Mostra a

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, falando de arrays e troca de valores me lembrou de ordenação, então:

 

function qsort( array &$m , $l = 0 , $r = null ){
$r = $r == null ? count( $m ) - 1 : $r;
$i = (int) $l; $j = (int) $r;
$p =& $m[ floor( ( $l + $r ) / 2 ) ];

if ( $i < $j ){
	while ( $m[ $i ] < $p ) ++$i;
	while ( $m[ $j ] > $p ) --$j;

	if ( $i <= $j ){
		if ( $m[ $i ] != $m[ $j ] ) $m[ $i ] ^= $m[ $j ] ^= $m[ $i ] ^= $m[ $j ];
		$i++; $j--;
	}
}

if ( $j > $l ) qsort( $m , $l , $j );
if ( $i < $r ) qsort( $m , $i , $r );
}

 

$arr = array( 1 , 8 , 3 , 5 , 7 , 2 , 6 , 9 , 4 );
qsort( $arr );

var_dump( $arr );

 

Saída:

array(9) {

[0]=>

int(1)

[1]=>

int(2)

[2]=>

int(3)

[3]=>

int(4)

[4]=>

int(5)

[5]=>

int(6)

[6]=>

int(7)

[7]=>

int(8)

[8]=>

int(9)

}

 

:P/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prefiro a minha

$a = 100; 
$b = 20;
$a = get_defined_vars();
$b = $a["a"]; 
$a = $a["b"];
echo("A = $a<br />B = $b");
Funciona com outros valores e não usei outras variáveis ou operadores (exceto atribuição).

Vi a discussão do Beraldo com o João Vitor, com uso da função get_defined_vars você consegue capturar essas variáveis e re-atribuir, seguindo assim o propósito do desafio, sem "criar" o vetor como sendo uma terceira variável =x

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prefiro a minha

$a = 100; 
$b = 20;
$a = get_defined_vars();
$b = $a["a"]; 
$a = $a["b"];
echo("A = $a<br />B = $b");
Funciona com outros valores e não usei outras variáveis ou operadores (exceto atribuição).

Vi a discussão do Beraldo com o João Vitor, com uso da função get_defined_vars você consegue capturar essas variáveis e re-atribuir, seguindo assim o propósito do desafio, sem "criar" o vetor como sendo uma terceira variável =x

 

É o mesmo problema: continua criando variável a mais. Apenas porque está usando o mesmo nome. Na memória ocorre a mesma coisa que ocorria no caso do João Vitor

 

Seu script é a mesma coisa que isto:

$a = 100; 
$b = 20;
$a = array( $a, $b )
$b = $a[0];
$a = $a[1];

 

Imagino que o "não criar variáveis novas" se refira a "não alocar espaço a mais na memória". Se não for isso, qualquer solução usando array resolve

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu andei dando uma olhada sobre, e vi que realmente é praticamente impossível trocar o valor de duas variaveis por uma auxiliar

isso é um conceito básico, você tem 2 valores, ai transferir o valor 2 para o valor 1, teria que alocar temporariamente o valor 1 em algum lugar, e de alocalo em qualquer lugar, ou qualquer função php que segure esse valor, essa função usaria uma array ou algo do gênero, alocaria um espaço temporario na memoria = variavel, portanto meio impossível isso. então gostei desse desafio, se alguém conseguir REALMENTE posta ai que estou curioso em ver !

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é um conceito básico, você tem 2 valores, ai transferir o valor 2 para o valor 1, teria que alocar temporariamente o valor 1 em algum lugar

...se alguém conseguir REALMENTE posta ai que estou curioso em ver !

 

Pow João, você não leu o tópico todo ???

 

As duas soluções apresentadas foram:

 

Usando Soma e Subtração: [anchorlink=730909]POST #2[/anchorlink]

$a = 100;
$b = 20;

echo 'antes $a vale ' , $a , PHP_EOL;
echo 'antes $b vale ' , $b , PHP_EOL;

$a = $a + $b;
$b = $a - $b;
$a = $a - $b;

echo 'depois $a vale ' , $a , PHP_EOL;
echo 'depois $b vale ' , $b , PHP_EOL;

 

Usando OR exclusivo bit a bit: [anchorlink=1148085]POST #14[/anchorlink]

$a = 100;
$b = 20;

echo 'antes $a vale ' , $a , PHP_EOL;
echo 'antes $b vale ' , $b , PHP_EOL;

$b ^= $a;
$a ^= $b;
$b ^= $a;

echo 'depois $a vale ' , $a , PHP_EOL;
echo 'depois $b vale ' , $b , PHP_EOL;

 

Nos dois casos a saída é:

antes $a vale 100

antes $b vale 20

depois $a vale 20

depois $b vale 100

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.