Есть ли функция PHP для замены значений двух переменных?

Скажем, например, у меня есть …

$var1 = "ABC" $var2 = 123 

и при определенных условиях я хочу поменять их вокруг так …

 $var1 = 123 $var2 = "ABC" 

Есть ли функция PHP для этого, вместо того, чтобы создавать третью переменную, чтобы удерживать одно из значений, а затем переопределять их, например …

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

Для такой простой задачи, вероятно, быстрее использовать третью переменную, и я всегда мог бы создать свою собственную функцию, если бы захотел. Просто интересно, существует ли что-то подобное?

Обновление. Использование 3-ей переменной или ее упаковка в функции – лучшее решение. Это чисто и просто. Я задал вопрос больше из любопытства, и выбранный ответ был своего рода «лучшей альтернативой». Просто используйте третью переменную.

Solutions Collecting From Web of "Есть ли функция PHP для замены значений двух переменных?"

Не существует встроенной функции.

Как уже упоминалось, существует 3 метода:

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

Я протестировал 3 метода под циклом из 1000 итераций, чтобы найти самый быстрый из них:

  • swap1 = набрал приблизительно 0,19 секунды.
  • swap2 = набрал приблизительно 0,44 секунды.
  • swap3 = набрал приблизительно 0,16 секунды.

И для удобочитаемости / возможности записи, IMO я считаю, что swap3 лучше, чем другие 2 функции.

ОБНОВЛЕНИЕ 2017:

  • swap2 всегда медленнее, чем другие из-за вызова функции.
  • swap1 и swap3 обе скорости производительности очень похожи, но большую часть времени swap3 немного быстрее.
  • Предупреждение: swap1 работает только с числами!

Нет никакой функции, о которой я знаю, но есть один лайнер любезности Пете Грэма :

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

не уверен, нравится ли мне это с точки зрения обслуживания, хотя на самом деле это неинтуитивно понятно.

Кроме того, как указывает @Paul Dixon, он не очень эффективен и дороже, чем использование временной переменной. Возможно, заметьте в очень большой петле.

Однако ситуация, когда это необходимо, немного пахнет мне. Если вы хотите обсудить это: для чего вам это нужно?

Также можно использовать старый трюк XOR (однако он работает корректно только для целых чисел, и он не делает код более удобным для чтения ..)

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

Да, теперь существует нечто подобное. Это не функция, а языковая конструкция (доступная с PHP 7.1). Он позволяет использовать этот короткий синтаксис:

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

Подробнее см. «Синтаксис квадратной скобки для назначения деструкции массива» .

Да, попробуйте это :

 // 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); 
 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 = $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!)

Вот еще один способ, не используя временную или третью переменную.

 <?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; 

Я думаю, что первый вариант является самым быстрым и требует меньшей памяти, но он не работает хорошо со всеми типами переменных. (пример: работает только для строк с одинаковой длиной)
Во всяком случае, этот метод намного лучше, чем метод арифметики, под любым углом.
(Арифметика: {$ a = ($ a + $ b) – $ a; $ b = ($ a + $ 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=122; $b=343; extract(array('a'=>$b,'b'=>$a)); echo '$a='.$a.PHP_EOL; echo '$b='.$b; 

Да, я знаю, что есть много доступных решений, но вот еще один. Вы можете также использовать 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; ?> 

DEMO

Если обе переменные являются целыми числами, вы можете использовать математический подход:

 $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/

 <?php swap(50, 100); function swap($a, $b) { $a = $a+$b; $b = $a - $b; $a = $a - $b; echo "A:". $a; echo "B:". $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; 

другой ответ

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