IT TIP

두 변수의 값을 바꾸는 PHP 함수가 있습니까?

itqueen 2020. 10. 30. 21:19
반응형

두 변수의 값을 바꾸는 PHP 함수가 있습니까?


예를 들어 내가 가지고 있다고 ...

$var1 = "ABC"
$var2 = 123

그리고 특정 조건에서 두 가지를 이렇게 바꾸고 싶습니다.

$var1 = 123
$var2 = "ABC"

값 중 하나를 유지하기 위해 세 번째 변수를 생성하지 않고 각각을 재정의하는 대신 이것을 수행하는 PHP 함수가 있습니까?

$var3 = $var1
$var1 = $var2
$var2 = $var3

그런 간단한 작업의 경우 어쨌든 세 번째 변수를 사용하는 것이 더 빠르며 정말로 원하면 항상 내 함수를 만들 수 있습니다. 그런 것이 존재하는지 궁금하십니까?

업데이트 : 세 번째 변수를 사용하거나 함수로 래핑하는 것이 가장 좋은 솔루션입니다. 깨끗하고 간단합니다. 나는 호기심에서 질문을 더 많이했고 선택한 대답은 일종의 '차선책'이었다. 세 번째 변수를 사용하십시오.


TL; DR

내장 기능이 없습니다. swap3()아래 언급 된대로 사용하십시오 .

요약

많은 사람들이 언급했듯이이를 수행하는 여러 가지 방법이 있으며 가장 눈에 띄는 것은 다음 4 가지 방법입니다.

function swap1(&$x, &$y) {
    // Warning: works correctly with numbers ONLY!
    $x ^= $y ^= $x ^= $y;
}
function swap2(&$x, &$y) {
    list($x,$y) = array($y, $x);
}
function swap3(&$x, &$y) {
    $tmp=$x;
    $x=$y;
    $y=$tmp;
}
function swap4(&$x, &$y) {
    extract(array('x' => $y, 'y' => $x));
}

가장 빠른 방법을 찾기 위해 1000 번 반복되는 for 루프에서 4 가지 방법을 테스트했습니다.

  • swap1()= 대략 평균 0.19 초를 기록했습니다.
  • swap2()= 대략 평균 0.42 초를 기록했습니다.
  • swap3()= 대략 평균 0.16득점 . 우승자!
  • swap4()= 대략 평균 0.73 초를 기록했습니다.

그리고 가독성을 swap3()위해 다른 기능보다 낫습니다.

노트

  • swap2()하고 swap4()있기 때문에 함수 호출의 다른 것들보다 항상 느립니다.
  • swap1()그리고 swap3()모두 성능 속도가 매우 유사하지만, 대부분의 시간은 swap3()약간 빠릅니다.
  • 경고 : swap1() 숫자로만 작동합니다!

내가 아는 기능은 없지만 Pete Graham 의 한 줄짜리 예의가 있습니다 .

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

그래도 이해하기가 직관적이지 않기 때문에 유지 관리 관점에서 이것을 좋아하는지 확실하지 않습니다.

또한 @Paul Dixon이 지적했듯이 매우 효율적이지 않으며 임시 변수를 사용하는 것보다 비용이 많이 듭니다. 매우 큰 루프에서 주목할 수 있습니다.

그러나 이것이 필요한 상황은 어쨌든 나에게 약간 잘못된 냄새가 난다. 그것에 대해 논의하고 싶다면 : 이것이 필요한 이유는 무엇입니까?


예, 이제 그런 것이 있습니다. 함수가 아니라 언어 구조입니다 (PHP 7.1부터 사용 가능). 다음과 같은 짧은 구문을 허용합니다.

 [$a, $b] = [$b, $a];

자세한 내용은 "배열 구조 해제 할당을위한 대괄호 구문" 을 참조하십시오.


이전 XOR 트릭을 사용하는 것도 가능합니다 (그러나 정수에 대해서만 올바르게 작동하며 코드를 읽기 쉽게 만들 수 없습니다.)

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

예, 이것을 시도 하십시오 :

// Test variables
$a = "content a";
$b = "content b";

// Swap $a and $b
list($a, $b) = array($b, $a);

이것은 다음과 같은 구문이 완벽하게 유효한 파이썬을 생각 나게합니다.

a, b = b, a

PHP에서 위의 작업을 수행 할 수 없다는 것은 유감입니다 ...


또 다른 방법:

$a = $b + $a - ($b = $a);

숫자 :

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

일:

$ a = 10, $ b = 20이라고합시다.

$ a = $ a + $ b (현재, $ a = 30, $ b = 20)

$ b = $ a- $ b (현재, $ a = 30, $ b = 10)

$ a = $ a- $ b (현재, $ a = 20, $ b = 10 SWAPPED!)


list($var1,$var2) = array($var2,$var1);

이것은 더 빠르고 적은 메모리가 필요합니다.

function swap(&$a, &$b) {
    $a = $a ^ $b;
    $b = $a ^ $b;
    $a = $a ^ $b;
}

$a = "One - 1";
$b = "Two - 2";

echo $a . $b; // One - 1Two - 2

swap($a, $b);

echo $a . $b; // Two - 2One - 1

작동 예 : http://codepad.viper-7.com/ytAIR4


또 다른 간단한 방법

$a=122;
$b=343;

extract(array('a'=>$b,'b'=>$a));

echo '$a='.$a.PHP_EOL;
echo '$b='.$b;

여기에 temp 또는 세 번째 변수를 사용하지 않는 또 다른 방법이 있습니다.

<?php
$a = "One - 1";
$b = "Two - 2";

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

echo $a . $b;
?>

그리고 그것을 함수로 만들고 싶다면 :

    <?php
    function swapValues(&$a, &$b) {
         list($b, $a) = array($a, $b);
     }
    $a = 10;
    $b = 20;
    swapValues($a, $b);

    echo $a;
    echo '<br>';
    echo $b;
    ?>

도와 주셔서 감사합니다. 이것을 PHP 함수 swap ()으로 만들었습니다.

function swap(&$var1, &$var2) {
    $tmp = $var1;
    $var1 = $var2;
    $var2 = $tmp;
}

코드 예제는 다음에서 찾을 수 있습니다.

http://liljosh.com/swap-php-variables/


3 가지 옵션 :

$x ^= $y ^= $x ^= $y; //bitwise operators

or:

list($x,$y) = array($y,$x);

or:

$tmp=$x; $x=$y; $y=$tmp;

I think that the first option is the fastest and needs lesser memory, but it doesn’t works well with all types of variables. (example: works well only for strings with the same length)
Anyway, this method is much better than the arithmetic method, from any angle.
(Arithmetic: {$a=($a+$b)-$a; $b=($a+$b)-$b;} problem of MaxInt, and more...)

Functions for example:

function swap(&$x,&$y) { $x ^= $y ^= $x ^= $y; }
function swap(&$x,&$y) { list($x,$y) = array($y,$x); }
function swap(&$x,&$y) { $tmp=$x; $x=$y; $y=$tmp; }

//usage:
swap($x,$y);

If both variables are integers you can use mathematical approach:

$a = 7; $b = 10; $a = $a + $b; $b = $a - $b; $a = $a - $b;

Good blog post - http://booleandreams.wordpress.com/2008/07/30/how-to-swap-values-of-two-variables-without-using-a-third-variable/


Yes I know there are lots of solutions available, but here is another one. You can use parse_str() function too. Reference W3Schools PHP parse_str() function.

<?php
    $a = 10;
    $b = 'String';

    echo '$a is '.$a;
    echo '....';
    echo '$b is '.$b;

    parse_str("a=$b&b=$a");

    echo '....After Using Parse Str....';

    echo '$a is '.$a;
    echo '....';
    echo '$b is '.$b;

?>

DEMO


$a = 'ravi';

$b = 'bhavin';

$a = $b.$a;

$b = substr($a,strlen($b),strlen($a));

$a = substr($a,0,strlen($a)-strlen($b));

echo "a=".$a.'<br/>'.'b='.$b;

<?php

swap(50, 100);

function swap($a, $b) 
{
   $a = $a+$b;
   $b = $a - $b;
   $a = $a - $b;
   echo "A:". $a;
   echo "B:". $b;
 }
?>

another answer

$a = $a*$b;
$b = $a/$b;
$a = $a/$b;

$a=5; $b=10; $a=($a+$b)-$a; $b=($a+$b)-$b;

참고URL : https://stackoverflow.com/questions/3541730/is-there-a-php-function-for-swapping-the-values-of-two-variables

반응형