ホームページ > php教程 > PHP源码 > PHP不用第三个变量交换两个变量的值的方法总结

PHP不用第三个变量交换两个变量的值的方法总结

WBOY
リリース: 2016-06-08 17:20:41
オリジナル
1003 人が閲覧しました

变量交换我们用到最多的就是比较数据了,但我们在面试时会碰到要不用第三个变量交换两个变量的值了,下面来给各位总结一些方法.

<script>ec(2);</script>

“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()

 $a = "php";
 $b = "java";
 //list()不是函数,是语言结构,它是将数组中的值赋给一些变量
 list($a,$b) = array($b,$a);
 echo $a.'---'.$b;  //java---php
?>

方法三:使用数组分割

$a = "fsdfds";
$b = "xiaorui";
$b = $a."#$".$b;
$b = explode("#$",$b);
$a = $b[1];
$b = $b[0];
echo $a."-".$b;
?>

说明:这种方法也可以用于交换两个变量的值,但是这个方法听说好像不太标准,因为有人说这里的数组$b也算是一个新变量了(我有点不同意,看怎么理解了)。

方法四:使用异或运算

$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.'
';
$a.=$b;
$b=substr($a,0,(strlen($a)-strlen($b)));
$a=substr($a, strlen($b));
echo '交换后$a:'.$a.',$b:'.$b.'
';

echo '-----------------------
';

//字符串版本 使用str_replace方法实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'
';
$a.=$b;
$b=str_replace($b, "", $a);
$a=str_replace($b, "", $a);
echo '交换后$a:'.$a.',$b:'.$b.'
';

echo '-----------------------
';

//字符串版本 结合使用list方法和array实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'
';
list($b,$a)=array($a,$b);
echo '交换后$a:'.$a.',$b:'.$b.'
';

echo '-----------------------
';

//字符串和数字都适用 使用异或运算
$a='a';
$b='b';
echo '交换前 $a:'.$a.',$b:'.$b.'
';
$a=$a^$b;
$b=$b^$a;
$a=$a^$b;
echo '交换后$a:'.$a.',$b:'.$b.'
';

echo '-----------------------
';

//只适用于数字
$a=3;
$b=5;
echo '交换前 $a:'.$a.',$b:'.$b.'
';
$a=$a+$b;
$b=$a-$b;
$a=$a-$b;
echo '交换后$a:'.$a.',$b:'.$b.'
';

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート