首页 > php开发 > PHP不用第三个变量交换两个变量的值的方法总结

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/develop/fs9234.html

收藏随意^^请保留教程地址.

标签:php第三个变量 php变量交换

发表留言