두 변수의 값을 교환하기 위한 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-loop에서 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);
이것은 다음과 같은 구문이 완벽하게 유효한 python을 떠올리게 합니다.
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 SWAP!)
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;
다음은 온도 또는 세 번째 변수를 사용하지 않는 다른 방법입니다.
<?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
또는 다음과 같이 입력합니다.
list($x,$y) = array($y,$x);
또는 다음과 같이 입력합니다.
$tmp=$x; $x=$y; $y=$tmp;
같은길이의 만 효과가 .(같은 길이의 문자열에 대해서만 효과가 있습니다.)
어쨌든 이 방법은 어떤 각도에서든 산술법보다 훨씬 낫다.
$sqa)-$a;$b=sqa+$b;}-$a;$b;}-$a=sqa+$b;}-$b;}-maxInt
기능 예:
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);
두 변수가 모두 정수인 경우 수학적 접근법을 사용할 수 있습니다.
$a = 7; $b = 10; $a = $a + $b; $b = $a - $b; $a = $a - $b;
좋은 블로그 투고 - http://booleandreams.wordpress.com/2008/07/30/how-to-swap-values-of-two-variables-without-using-a-third-variable/
여러 것을 또 해결책이 .하시면 됩니다.parse_str()
기능하고 있습니다.W3Schools PHP parse_str() 함수를 참조합니다.
<?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 variable ref. pattern을 사용했습니다.$$를 의미합니다.자세한 내용은 이 링크를 참조하십시오.https://www.php.net/manual/en/language.variables.variable.php
$a =12;$b="ABC";
$$a =$b;
$$b= $$a.$a;
echo " a = $a and b=$b <br>now after reverse.<br>";
echo $$b;
//출력 : abc12
<?php
swap(50, 100);
function swap($a, $b)
{
$a = $a+$b;
$b = $a - $b;
$a = $a - $b;
echo "A:". $a;
echo "B:". $b;
}
?>
다른 대답
$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
'itsource' 카테고리의 다른 글
케이스 스테이트먼트가 연속적으로 필요한 이유는 무엇입니까? (0) | 2022.09.29 |
---|---|
SELECT 속도를 높이는 방법..MySQL의 LIKE 쿼리가 여러 열에 있습니까? (0) | 2022.09.29 |
MYSQL - 경고: #1681 정수 표시 너비는 권장되지 않습니다. (0) | 2022.09.28 |
포어치 실행 시 배열 값 변경 (0) | 2022.09.28 |
NumPy 어레이를 다른 NumPy 어레이에 연결합니다. (0) | 2022.09.28 |