두 변수의 값을 바꾸는 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;
?>
$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;
'IT TIP' 카테고리의 다른 글
| 레일스 콘솔이 libreadline으로 인해로드되지 않습니다. (0) | 2020.10.30 |
|---|---|
| 파일 삭제를위한 MSBuild 작업 구문 (0) | 2020.10.30 |
| Ruby gem mysql2 설치 실패 (0) | 2020.10.30 |
| 투명한 배경으로 UITableViewCell을 만드는 방법 (0) | 2020.10.30 |
| 솔트 생성 및 오픈 소스 소프트웨어 (0) | 2020.10.30 |