PHP互换两个变量值的方法(不用第三变量)


Posted in PHP onNovember 14, 2016

前言

今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的。详细的解说见代码注释,下面来一起看看吧。

一、substr() && strlen()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法一
 * 使用substr()结合strlen()两个方法达到交换变量值得目的
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a .= $b; // 将$b的值追加到$a中
/**
 * $b得到$a值详解:
 *  先通过strlen()分别计算出$a和$b中字符串的长度【此时$a是原始$a和$b的合值】
 *  通过strlen($a)-strlen($b)即可得出原始$a的值长度
 *  在通过substr()方法在合并后的$a中从0开始截取到$a的长度,那么即可得到原始$a的值
 * $a得到$b值详解:
 *  由于此刻$b已经是$a的原始值了,而$a合并后的值为原始$a+原始$b的值,故用substr()在$a中从$b(原始$a)长度位置截取,则去的内容则为原始$b,则将$b值付给$a成功
 */
$b = substr($a,0,(strlen($a)-strlen($b)));
$a = substr($a, strlen($b));
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

二、str_replace()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法二
 * 使用str_replace()方法达到交换变量值得目的
 * 此方法较第一种,逻辑上稍微简单点
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a .= $b; // 将$b的值追加到$a中
$b = str_replace($b, "", $a); // 在$a(原始$a+$b)中,将$b替换为空,则余下的返回值为$a
$a = str_replace($b, "", $a); // 此时,$b为原始$a值,则在$a(原始$a+$b)中将$b(原始$a)替换为空,则余下的返回值则为原始$b,交换成功
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

三、list() && list()

代码:

<?php
/**
 * 双方变量为字符串时,可用交换方法三
 * 使用list()和array()方法达到交换变量值得目的
 * 此方法较第一、二种,代码最简洁
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
list($b,$a) = array($a,$b); // list() 函数用数组中的元素为一组变量赋值。了解这个,相信其他的不用我多说了吧
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

四、异或

代码:

<?php
/**
 * 双方变量为字符串或者数字时,可用交换方法四
 * 使用异或运算
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
/**
 * 原始二进制:
 * $a:010101000110100001101001011100110010000001101001011100110010000001000001
 * $b:010101000110100001101001011100110010000001101001011100110010000001000010
 * 
 * 下面主要使用按位异或交换,具体请参照下列给出的二进制过程,
 */
$a=$a^$b; // 此刻$a:000000000000000000000000000000000000000000000000000000000000000000000011
$b=$b^$a; // 此刻$b:010101000110100001101001011100110010000001101001011100110010000001000001
$a=$a^$b; // 此刻$a:010101000110100001101001011100110010000001101001011100110010000001000010
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:This is A, $b 的值:This is B

     交换之后 $a 的值:This is B, $b 的值:This is A

五、加(+)减(-)运算符

代码:

<?php
/**
 * 双方变量为数字时,可用交换方法五
 * 使用加减运算符,相当于数学运算了^_^
 */
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出原始值
$a=$a+$b; // $a $b和值
$b=$a-$b; // 不解释..
$a=$a-$b; // 不解释..
echo '交换之后 $a 的值:'.$a.', $b 的值:'.$b,'<br>'; // 输出结果值

运行结果:

     交换之前 $a 的值:1, $b 的值:2

     交换之后 $a 的值:2, $b 的值:1

总结

好了,以上差不多就是在php中不借助第三个变量交换两个变量值的所有方法了,当然,肯定还有更好地,我这里算是抛砖引玉了。说到底,都是小算法,大家有空自己也可以研究下。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
Java中final关键字详解
Aug 10 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
PHP 8新特性简介
Aug 18 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
PHP7 list() 函数修改
Mar 09 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 #PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 #PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 #PHP
Symfony2创建基于域名的路由相关示例
Nov 14 #PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 #PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 #PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 #PHP
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
js解决movebox移动问题
2016/03/29 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
windows下python安装pip图文教程
2018/05/25 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
PageFactory设计模式基于python实现
2020/04/14 Python
请解释流与文件有什么不同
2016/07/29 面试题
毕业生动漫设计求职信
2013/10/11 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
农村党支部承诺书
2015/04/30 职场文书
新学期主题班会
2015/08/17 职场文书