PHP不用第三个变量交换两个变量的值的方法总结
变量交换我们用到最多的就是比较数据了,但我们在面试时会碰到要不用第三个变量交换两个变量的值了,下面来给各位总结一些方法.
“PHP不用第三个变量交换两个变量的值”这个题看到过好多次了,看来面试确实喜欢考这道题。今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充。
方法一:使用字符串截取
<?php $a = "fsdfds"; $b = "xiaorui"; $a = $a.$b; $b = substr($a,0,strlen($a)-strlen($b)); $a = substr($a,strlen($b)); echo $a."-".$b; ?>
方法二:使用list()
<?php $a = "php"; $b = "java"; //list()不是函数,是语言结构,它是将数组中的值赋给一些变量 list($a,$b) = array($b,$a); echo $a.'---'.$b; //java---php ?>
方法三:使用数组分割
<?php $a = "fsdfds"; $b = "xiaorui"; $b = $a."#$".$b; $b = explode("#$",$b); $a = $b[1]; $b = $b[0]; echo $a."-".$b; ?>
说明:这种方法也可以用于交换两个变量的值,但是这个方法听说好像不太标准,因为有人说这里的数组$b也算是一个新变量了(我有点不同意,看怎么理解了)。
方法四:使用异或运算
<?php $a = "fsdfds"; $b = "xiaorui"; $a = $a^$b; $b = $b^$a; $a = $a^$b; echo $a."-".$b; ?>
说明:这个方法是网上看到的,我仔细试了一下,发现这个居然是有BUG的。用次方法只能交换字符相同的两个字符串型的变量,不然结果是不正确的。
网上又找到一些方法
//字符串版本 结合使用substr,strlen两个方法实现$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=substr($a,0,(strlen($a)-strlen($b)));$a=substr($a, strlen($b));echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串版本 使用str_replace方法实现$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=str_replace($b, "", $a);$a=str_replace($b, "", $a);echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串版本 结合使用list方法和array实现$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';list($b,$a)=array($a,$b);echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //字符串和数字都适用 使用异或运算$a='a';$b='b';echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a=$a^$b;$b=$b^$a;$a=$a^$b;echo '交换后$a:'.$a.',$b:'.$b.'<br />'; echo '-----------------------<br/>'; //只适用于数字$a=3;$b=5;echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a=$a+$b;$b=$a-$b;$a=$a-$b;echo '交换后$a:'.$a.',$b:'.$b.'<br />';
永久地址:http://www.phprm.com/code/80536.html
转载随意~请带上教程地址吧^^